Varargs is de syntaxis die een methode toelaat om een variabel aantal argumenten van één type te ontvangen. Ze worden gedeclareerd met behulp van een driepuntsnotatie:
public void printNames(String... names) { for (String name : names) { System.out.println(name); } }
Varargs parameter binnen een methode is gewoon — een array van het overeenkomstige type: String[] names in het bovenstaande voorbeeld. Je kunt de methode aanroepen met een willekeurig aantal argumenten of met een array:
printNames("Igor", "Anna", "Maria"); printNames(new String[] {"Alex", "Inna"});
Fijnere punten van gebruik:
Vraag: Wat is de lengte van de varargs parameter array als je de methode aanroept zonder argumenten?
Antwoord: In dit geval zal de varargs variabele verwijzen naar een array van nul lengte: new String[0]. Het wordt niet null!
public void foo(Integer... args) { System.out.println(args.length); } // foo(); // Toont: 0
Geloof
In de logging bibliotheek was er een methode log(String... messages). Bij het aanroepen van log(null) ontstond er een NullPointerException binnen de methode (verwacht dat messages een lege array zou zijn, in plaats daarvan was het null). Dit leidde tot het expliciet controleren op null.
Geloof
De ontwikkelaar creëerde een overload:
public void doSomething(String[] arr) {...} public void doSomething(String... arr) {...}Bij het doorgeven van een array, werd de verkeerde methode aangeroepen, wat leidde tot dataverlies. Het verschil tussen een array en varargs bleek onduidelijk te zijn.
Geloof
In het project werd er een tweede parameter na varargs toegevoegd:
public void foo(String... args, int count) {...} // Compilatiefout!Dit leidde tot een fout en een mislukte build, omdat varargs de laatste moet zijn.