179 votes

Nombre variable d'arguments Java pour une méthode

Est-il possible de déclarer une méthode qui permettra un nombre variable de paramètres ?

Quel est le symbolisme utilisé dans la définition qui indique que la méthode devrait permettre un nombre variable de paramètres ?

Réponse : varargs

313voto

BalusC Points 498232

C'est exact. Vous pouvez en trouver plus à ce sujet dans le guide Oracle sur varargs.

Voici un exemple :

void foo(String... args) {
    for (String arg : args) {
        System.out.println(arg);
    }
}

qui peut être appelé comme

foo("foo"); // Single arg.
foo("foo", "bar"); // Multiple args.
foo("foo", "bar", "lol"); // Don't matter how many!
foo(new String[] { "foo", "bar" }); // Arrays are also accepted.
foo(); // And even no args.

18voto

Dolph Points 12741

Oui, c'est possible :

public void myMethod(int... numbers) { /* your code */ }

14voto

snm-yah Points 2067

Pour différents types d'arguments, il y a 3 points :

public void foo(Object... x) {
    String myVar1  = x.length > 0 ? (String)x[0]  : "Hello";
    int myVar2     = x.length > 1 ? Integer.parseInt((String) x[1]) : 888;
} 

Alors appelez-le

foo("Hii"); 
foo("Hii", 146); 

pour la sécurité, utilisez comme ceci :
if (!(x[0] instanceof String)) { throw new IllegalArgumentException("..."); }

Le principal inconvénient de cette approche est que si les paramètres optionnels sont de différents types, vous perdez la vérification de type statique. S'il vous plaît, voyez plus de variations.

9voto

Anon. Points 26829

Le libellé de la question est quelque peu ambigu. Bien que varargs soit le nom technique pour cela, je suis enclin à penser que la question est en fait de savoir quelle syntaxe est utilisée afin d'indiquer un paramètre varargs.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X