Varargs — bir metodun aynı türden değişken (herhangi bir) sayıda argümanı almasını sağlayan özel bir sözdizimidir. Metodun tanımında bu parametre Type... name şeklinde belirtilir (örneğin, int... nums). Metod içinde argümanlar normal bir dizi olarak algılanır.
Örnek:
public void printNumbers(int... nums) { for (int n : nums) { System.out.print(n + " "); } }
Çağrılar şu şekilde yapılabilir:
printNumbers(1, 2, 3, 4); // veya printNumbers();
Dahili uygulama: varargs ile bir metod çağrıldığında, derleyici otomatik olarak ilgili türde bir dizi oluşturur.
Kısıtlamalar ve incelikler:
printNumbers(null) çağrısı, döngü sırasında NPE meydana getirecektir.Soru: "Birden fazla varargs parametresi ile metod tanımlanabilir mi?"
Sık yapılan hata: Birçok kişi public void example(int... a, String... b) tanımlanabileceğini düşünür, ancak bu derleme hatası alacaktır.
Doğru cevap: Hayır, yalnızca bir varargs parametresi olabilir ve bu sonuncusu olmalıdır.
Hikaye
Kurumsal bir günlük kütüphanesinde, varargs ve diziler ile aşırı yüklenmiş yöntemler uygulandı. Bir dizi geçirildiğinde, elemanlar seti yerine yanlış metod versiyonu seçildiği için dizi bir nesne olarak günlüğe kaydedildi, içeriği değil. Bu, günlük analizi sırasında karışıklığa yol açtı.
Hikaye
Entegrasyon servisinde varargs ile bir metod çağrısı null kabul etti ve NPE kontrolü yapılmadı. Elemanları dolaşma girişiminde sistem beklenmedik bir şekilde "çökmeye" başladı, çünkü en azından boş bir dizinin beklenmesi gerekiyordu.
Hikaye
Bir e-ticaret projesinde metod aşırı yüklemeleri arasında karışıklık yaşandı:
send(String subject, String... emails)ve başka bir metod —send(String subject, String[] emails). Bir dizi geçirildiğinde, derleyici yanlış metodunu seçiyordu. Sonuç: e-postalar müşterilere gönderilmedi.