Varargs — eine spezielle Syntax, die es einer Methode ermöglicht, eine variable (beliebige) Anzahl von Argumenten eines Typs zu akzeptieren. In der Methodendeklaration wird dieser Parameter als Type... name bezeichnet (zum Beispiel int... nums). Innerhalb der Methode werden die Argumente als normales Array betrachtet.
Beispiel:
public void printNumbers(int... nums) { for (int n : nums) { System.out.print(n + " "); } }
Man kann es so aufrufen:
printNumbers(1, 2, 3, 4); // oder printNumbers();
Interne Implementierung: Bei der Methode mit Varargs erstellt der Compiler automatisch ein Array des entsprechenden Typs.
Einschränkungen und Feinheiten:
printNumbers(null) führt zu NPE beim Versuch, zu iterieren.Frage: "Kann man eine Methode mit mehreren Varargs-Parametern deklarieren?"
Häufige Fehlannahme: Viele denken, dass man public void example(int... a, String... b) deklarieren kann, dies führt jedoch zu einem Kompilierungsfehler.
Richtige Antwort: Nein, es kann nur einen Varargs-Parameter geben, und dieser muss der letzte sein.
Geschichte
In der Unternehmenslogging-Bibliothek wurden überladene Versionen von Methoden mit Varargs und Arrays implementiert. Bei der Übergabe eines Arrays anstelle von mehreren Elementen wurde nicht die richtige Methodenvariante verwendet, was dazu führte, dass das Array als Objekt und nicht dessen Inhalt geloggt wurde. Dies führte zu Verwirrung bei der Analyse der Protokolle.
Geschichte
Im Integrationsdienst akzeptierte der Methodenaufruf mit Varargs null, ohne auf NPE zu überprüfen. Das System „stürzte“ unerwartet ab, als versucht wurde, die Elemente zu durchlaufen, da mindestens ein leeres Array erwartet wurde.
Geschichte
In einem E-Commerce-Projekt gab es Verwirrung bei den Methodenüberladungen: Es gab eine Methode
send(String subject, String... emails)und eine andere —send(String subject, String[] emails). Bei der Übergabe eines Arrays wählte der Compiler implizit nicht die richtige Methode. Ergebnis: Die E-Mails wurden nicht an die Kunden gesendet.