221 votes

Quel est l'ellipse (...) pour dans cette signature de méthode?

Dans la documentation d'App Engine, à quoi sert l'ellipse (JID...) dans cette signature de méthode?

public MessageBuilder withRecipientJids(JID... recipientJids)

Quel est le rôle de ces trois points?

7 votes

Au fait, j'ai essayé le caractère HORIZONTAL ELLIPSIS, , Unicode U+2026. NetBeans 8 en Java 8 signale "caractère illégal". Donc, les varargs Java nécessitent le triple POINT DE SUITE (point), ....

220voto

Il s'agit de Java varargs. Ils vous permettent de passer un nombre quelconque d'objets d'un type spécifique (dans ce cas, ils sont de type JID).

Dans votre exemple, les appels de fonction suivants seraient valides :

MessageBuilder msgBuilder; //Il devrait probablement y avoir un appel à un constructeur ici ;)
MessageBuilder msgBuilder2;
msgBuilder.withRecipientJids(jid1, jid2);
msgBuilder2.withRecipientJids(jid1, jid2, jid78_a, someOtherJid);

En savoir plus ici : http://java.sun.com/j2se/1.5.0/docs/guide/language/varargs.html

16 votes

Veuillez noter que les arguments peuvent également être transmis sous forme de tableau de JID (ce qui rend les varargs rétrocompatibles).

55 votes

Veuillez noter que passer 0 varargs (rien) est légal.

9 votes

Enfin, le vararg doit être le dernier paramètre de la méthode. Ainsi, vous ne pouvez pas avoir deux paramètres vararg dans la même méthode. Peut-être que vous trouverez cette méthode intéressante docs.oracle.com/javase/7/docs/api/java/util/…

71voto

Lucio Points 409

La façon d'utiliser l'ellipsis ou les varargs à l'intérieur de la méthode est comme s'il s'agissait d'un tableau :

public void PrintWithEllipsis(String...setOfStrings) {
    for (String s : setOfStrings)
        System.out.println(s);
}

Cette méthode peut être appelée comme suit :

obj.PrintWithEllipsis(); // ne rien imprimer
obj.PrintWithEllipsis("premier"); // imprime "premier"
obj.PrintWithEllipsis("premier", "deuxième"); // imprime "premier\ndeuxième"

À l'intérieur de PrintWithEllipsis, le type de setOfStrings est un tableau de String. Vous pourriez donc faciliter le travail du compilateur en passant un tableau :

String[] argsVar = {"premier", "deuxième"};
obj.PrintWithEllipsis(argsVar);

Pour les méthodes avec varargs, un paramètre de séquence est traité comme étant un tableau du même type. Donc si deux signatures diffèrent seulement en ce sens que l'une déclare une séquence et l'autre un tableau, comme dans cet exemple :

void process(String[] s){}
void process(String...s){}

alors une erreur de compilation se produit.

Source : La spécification du langage de programmation Java, où le terme technique est variable arity parameter plutôt que le terme courant varargs.

25voto

James Goodwin Points 4234

La notation à trois points (...) est en fait empruntée aux mathématiques, et cela signifie "...et ainsi de suite".

Quant à son utilisation en Java, elle représente varargs, ce qui signifie que n'importe quel nombre d'arguments peut être ajouté à l'appel de méthode. Les seules limitations sont que le varargs doit être à la fin de la signature de méthode et qu'il ne peut y en avoir qu'un par méthode.

7voto

OscarRyz Points 82553

Voici des varargs qui sont utilisés pour créer une méthode qui reçoit un nombre quelconque d'arguments.

Par exemple, la méthode PrintStream.printf l'utilise, puisque vous ne savez pas combien d'arguments vous utiliserez.

Ils ne peuvent être utilisés qu'en dernière position des arguments.

varargs a été ajouté dans Java 1.5

4voto

Rob Points 31432

Cela signifie que la méthode accepte un nombre variable d'arguments ("varargs") de type JID. Dans la méthode, recipientJids est présenté.

Cela est pratique dans les cas où vous avez une méthode qui peut éventuellement gérer plus d'un argument de manière naturelle, et vous permet d'écrire des appels pouvant passer un, deux ou trois paramètres à la même méthode, sans avoir la laideur de créer un tableau à la volée.

Cela permet également des idiomes tels que sprintf en C; voir par exemple String.format().

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