Varargs, bir metoda belirli bir türden değişken sayıda argüman almasını sağlayan sözdizimidir. Üç nokta ile bildirilir:
public void printNames(String... names) { for (String name : names) { System.out.println(name); } }
Varargs parametresi, method içinde aslında belirli türden bir dizi: yukarıdaki örnekte String[] names. Metodu herhangi bir sayıda argüman veya bir dizi ile çağırabilirsiniz:
printNames("Igor", "Anna", "Maria"); printNames(new String[] {"Alex", "Inna"});
Kullanım incelikleri:
Soru: Parametre olarak argüman geçmeden bu metodu çağırırsanız, varargs parametresinin dizisinin uzunluğu ne olur?
Cevap: Bu durumda varargs değişkeni, sıfır uzunluğunda bir diziye referans olacaktır: new String[0]. Null olmayacak!
public void foo(Integer... args) { System.out.println(args.length); } // foo(); // Çıktı: 0
Hikaye
Kayıt kütüphanesinde log(String... messages) adında bir metod vardı. log(null) şeklinde çağrıldığında metod içinde NullPointerException meydana geldi (messages'ın boş bir dizi olması bekleniyordu, aslında null oldu). Çözüm olarak null'ı açıkça kontrol etmek zorunda kaldık.
Hikaye
Geliştirici bir aşırı yükleme oluşturdu:
public void doSomething(String[] arr) {...} public void doSomething(String... arr) {...}Dizi geçirildiğinde, beklenen metod çağrılmadı ve bu da veri kaybına yol açtı. Dizi ve varargs arasındaki fark açık olmadı.
Hikaye
Projeye varargs'tan sonra ikinci bir parametre eklendi:
public void foo(String... args, int count) {...} // Derleme hatası!Bu, varargs'ın son olmasi gerektiğinden hataya ve derleme hatasına yol açtı.