Depuis le JDK 1.5 qui fut une petite révolution il y a presque 10 ans de cela, il est possible de déclarer des méthodes ayant une liste de paramètre de taille variable afin de pouvoir appeler la méthode avec 1, 2 ou n’importe quel nombre de paramètre. Cela rappelait la fonction printf du langage C.
C’est en effet bien pratique d’appeler une méthode en lui passant le nombre d’argument que l’on veut. Une exemple canonique serait une méthode qui renvoie la concaténation des chaînes en paramètre.
String concat(String... arg){ String concatenation = ""; // corps de la méthode return concatenation; }
Que l’on pourra appeler en faisant
String s = null; s = concat("ma"," ","chaine"," ", "de", " ", "caractères"); // "ma chaine de caractère"
Il s’agit néanmoins d’un sorte de goodie du compilateur pour nous éviter de passer un tableau car c’est comme ça que l’on faisait avant. On déclarait la méthode comme suit:
String concat(String[] arg){ // corps de la méthode }
Puis lors de l’appel on s’efforçait de passe un tableau avec le surcoût de création de celui-ci:
String s = contact(new String[]{"ma"," ","chaine"," ","de"," ","caractères"});
Bien vu. On notera la limitation suivante, le paramètre variable doit être le dernier paramètre de la signature. Donc il ne peut y en avoir qu’un seul. On ne peut pas par exemple utiliser les points de suspension pour définir une méthode avec en premier lieu une liste d’un type et en second lieu une liste d’un autre type.
void neCompilePas(Object... lo, String... listStr) // le compilateur n'en veut pas
void compileBien(Object o, String... listStr) // on a le droitTags: Java