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?
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?
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
Veuillez noter que les arguments peuvent également être transmis sous forme de tableau de JID (ce qui rend les varargs rétrocompatibles).
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/…
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
.
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.
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
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 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.
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),...
.