Dans le docs App Engine , qu'est-ce que l'Ellipsis (JID...
) pour dans cette méthode signature?
public MessageBuilder withRecipientJids(JID... recipientJids)
Quelle est la fonction de ces trois points?
Celles-ci sont Java varargs. Elles vous permettent de transmettre n’importe quel nombre d’objets d’un type spécifique (dans ce cas, ils sont du type JID).
Dans votre exemple, les appels de fonction suivants seraient valides:
MessageBuilder msgBuilder; //There should probably be a call to a constructor here ;)
MessageBuilder msgBuilder2;
msgBuilder.withRecipientJids(jid1, jid2);
msgBuilder2.withRecipientJids(jid1, jid2, jid78_a, someOtherJid);
Voir plus ici: http://Java.Sun.com/j2se/1.5.0/docs/guide/language/varargs.html
La manière d'utiliser Ellipsis ou varargs à l'intérieur de la méthode est comme si elle était 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(); // prints nothing
obj.PrintWithEllipsis("first"); // prints "first"
obj.PrintWithEllipsis("first", "second"); // prints "first\nsecond"
A l'intérieur de PrintWithEllipsis
, le type de setOfStrings
est un tableau de String. Donc, vous pourriez économiser du travail au compilateur et passer un tableau:
String[] argsVar = {"first", "second"};
obj.PrintWithEllipsis(argsVar);
Pour les méthodes varargs, un paramètre de séquence est traité comme un tableau du même type. Donc, si deux signatures ne diffèrent que par le fait 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 survient.
Source: La spécification Java Langage de programmation , où le terme technique est variable arity parameter
plutôt que le terme commun varargs
.
La notation à trois points (...) est en fait empruntée aux mathématiques et signifie "... et ainsi de suite".
Quant à son utilisation en Java, il signifie varargs
, ce qui signifie qu’un nombre quelconque d’arguments peuvent être ajoutés à l’appel de la méthode. Les seules limitations sont que le varargs
doit se trouver à la fin de la signature de la méthode et qu'il ne peut y en avoir qu'une par méthode.
Ceux-ci sont varargs
ils 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, car vous ne savez pas combien d'arguments vous utiliserez.
Ils ne peuvent être utilisés que comme position finale des arguments.
varargs
a été ajouté le 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é.
Ceci est pratique pour les cas où vous avez une méthode qui peut éventuellement gérer plusieurs arguments de manière naturelle et vous permet d'écrire des appels pouvant transmettre un, deux ou trois paramètres à la même méthode, sans avoir la laideur de créer un tableau à la volée.
Il active également des expressions telles que sprintf
à partir de C; voir String.format()
, par exemple.