2010-04-14 12 views
19

parametreleri. Ardından, (sert olacak hem de parametrelerin değişken sayıda kabul eden bir işlevJava variadic fonksiyon Ben parametrelerin değişken sayıda kabul eden bir işleve sahip

bar(??) 

var ve değişkenler ve aynı türde (bu kolay) aynı sayıda olduğunu doğrulamak için mümkün istiyorum bölüm) foo'da belirtildiği gibi.

Bunu nasıl yapabilirim?

Düzenleme: bir çağrı olabilir netleştirmek için:

foo (String.class, Int.class); 
bar ("aaa", 32); // OK! 
bar (3); // ERROR! 
bar ("aa" , "bb"); //ERROR! 

Ayrıca foo ve çubuk aynı sınıfın yöntemlerdir. Böyle

+0

Gereksiniminizi anlamadım. 'Foo'da belirtilenle aynı sayı' ile ne demek istiyorsun? Böyle bir sayı yok. Foo'ya yapılan her çağrı farklı sayıda argüman ile olabilir. – duduamar

+0

Oracle belgelerinde, "varargs" gibi isteğe bağlı parametreler açıklanmaktadır: http://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html. Temel olarak sadece bir dizi, yakut ve diğer programlama dillerinde olduğu gibi. – JohnMerlino

cevap

33

şey: Örneğin

private Class<?>[] types; 

public void foo(Class<?>... types) 
{ 
    this.types = types; 
} 

public boolean bar(Object... values) 
{ 
    if (values.length != types.length) 
    { 
     System.out.println("Wrong length"); 
     return false; 
    } 
    for (int i = 0; i < values.length; i++) 
    { 
     if (!types[i].isInstance(values[i])) 
     { 
      System.out.println("Incorrect value at index " + i); 
      return false; 
     } 
    } 
    return true; 
} 

:

test.foo(String.class, Integer.class); 
test.bar("Hello", 10); // Returns true 
test.bar("Hello", "there"); // Returns false 
test.bar("Hello"); // Returns false 

(sonuçların muhtemelen geçersiz veri için bir istisna kullanarak ... rapor şeklini değiştirmek isteyeceksiniz Açıkçası.)

İlgili konular