2015-11-23 16 views
6

Parametre olarak herhangi bir türden (temel öğeler dahil) herhangi bir diziyi kabul edecek bir yöntemi nasıl yazabilirim? ÖrneğinJava'da herhangi bir diziyi parametre olarak nasıl geçiririm?

, işe şu aramaların hem istiyorum:

public static <T> boolean hasSize(T[] array, int expectedSize) 
{ 
    return (array.length == expectedSize); 
} 

... ama bu değil:

int[] intArray = {1, 2, 3}; 
String[] strArray = {"1", "2"}; 

hasSize(intArray, 3); 
hasSize(strArray, 2); 

Ben şimdiye kadar bize en yakın olan ilkel için çalışmak.

+0

o nesneler dizisi yapmak java iç API kullanılır

public static <T> void process(T...args) { System.out.println(Arrays.toString(args)); } 

vargs kavramını kullanan bir o yazmak için bir yol değişken argümanları hariç olacak olursa? – cristianhh

+0

Aynı şeyi düşünüyordum, ancak Object [] ilkelleri kabul etmeyecek .. – Tomasito665

+0

Olası bir çoğaltılabilirsin: [String dizisini bir fonksiyon java'ya parametre olarak geçirme] (http://stackoverflow.com/questions/11698283/passing- a-string-array-as-a-parameter-to-a-function-java) – ha9u63ar

cevap

5

İlkel bir dizi ve paylaşmayan bir nesne dizisi olan temel sınıfa olması gerekir.

Yani tek olasılık bu da olmayan diziler, istediğiniz muhtemelen çözümü kabul Tabii dizisi

public static <T> boolean hasSize(Object x, int expectedSize) 
{ 
    return (x != null) && x.getClass().isArray() ? 
     java.lang.reflect.Array.getLength(x) == expectedSize : 
     false; 
} 

ise bir nesneyi ve metod çek içine kabul etmek olurdu.

Bu nedenle JDK çoğunlukla nesne dizileri ve ilkel diziler için aynı yöntemleri sağlar.

+0

Yeterince adil. O zaman herhangi bir diziyi tamamen desteklemesini sağlamak için bütün bir dizi ilkel dizi yöntemini yazmam gerekecek. Tek bir parametre tipi hariç her yöntemin uygulanmasının aynı olacağından bu bir utançtır. –

1

Doğru hatırlıyorsam, temel ilkelerin kendileri sınıflar olmadığından ve Java jenerik sistemi için kullanılamadığından, ilkel almayı beklediğiniz genel bir dizi oluşturamazsınız.

Aksine, gelen dizi Object dışında bir tamsayı [], Çift [], vb

0

Bu tam olarak ne istediğinizi değil bu

public class A { 

    public static void main (String[] args) { 

     int[] intArray = {1, 2, 3}; 
     String[] strArray = {"1", "2"}; 

     hasSize(Arrays.asList(intArray), 3); 
     hasSize(Arrays.asList(strArray), 2); 
    } 

    public static <T> boolean hasSize(List<T> array, int expectedSize) 
    { 
     return (array.size() == expectedSize); 
    } 
} 

gibi bir şey yapabilirsiniz. Ancak, diziyi listeye geçirerek genel mekanizmadan faydalanabilirsiniz ve otomatik kutulama işi sizin için yapar.

Bu yaklaşım sizin için iyi ise, tamam, ancak iyi bir yaklaşım değilse, ne yazık ki, genel mekanizma ilkel türleri desteklemiyorsa, bu nedenle her dizi türü için yöntemi geçersiz kılmanız gerekir.

+0

Hayır, bu işe yaramaz. Kullanıcıyı {{Arrays.asList()}} çağrısı yapmaya zorlar; bunu yaparlarsa, {{Arrays.asList(). Size()}} numaralı telefonu arayabilir ve doğrudan int == int karşılaştırması kullanabilirler. bir yöntem yazmadan. –

0

Yukarıda belirtildiği gibi, ilkel diziyi ve Nesne dizisini karıştıramazsınız, sarmalayıcı sınıfını kullanmanız gerekir. fonksiyonu bu kavramı

İlgili konular