Varargs ist eine Syntax, die es einer Methode ermöglicht, eine variable Anzahl von Argumenten desselben Typs zu empfangen. Sie werden mit drei Punkten deklariert:
public void printNames(String... names) { for (String name : names) { System.out.println(name); } }
Der Varargs-Parameter innerhalb der Methode ist einfach ein Array des entsprechenden Typs: String[] names im obigen Beispiel. Die Methode kann mit beliebig vielen Argumenten oder mit einem Array aufgerufen werden:
printNames("Igor", "Anna", "Maria"); printNames(new String[] {"Alex", "Inna"});
Besonderheiten:
Frage: Welche Länge hat das Array des Varargs-Parameters, wenn Sie die Methode ohne Argumente aufrufen?
Antwort: In diesem Fall wird die Variable varargs auf ein Array mit null Länge verweisen: new String[0]. Es wird nicht null sein!
public void foo(Integer... args) { System.out.println(args.length); } // foo(); // Gibt aus: 0
Geschichte
In der Logging-Bibliothek gab es eine Methode log(String... messages). Bei dem Aufruf log(null) trat ein NullPointerException innerhalb der Methode auf (man erwartete, dass messages ein leeres Array ist, stattdessen war es null). Um das zu lösen, musste explizit auf null überprüft werden.
Geschichte
Ein Entwickler erstellte eine Überladung:
public void doSomething(String[] arr) {...} public void doSomething(String... arr) {...}Beim Übergeben eines Arrays wurde nicht die erwartete Methode aufgerufen, was zu einem Verlust von Daten führte. Der Unterschied zwischen Array und varargs war nicht offensichtlich.
Geschichte
Im Projekt wurde ein zweiter Parameter nach varargs hinzugefügt:
public void foo(String... args, int count) {...} // Compilerfehler!Dies führte zu einem Fehler und einem Build-Ausfall, da varargs der letzte sein muss.