web-dev-qa-db-fra.com

A quoi servent les Ellipsis (...) dans cette signature de méthode?

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?

190
natchy

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.

59
Lucio

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.

21
James Goodwin

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

5
OscarRyz

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.

3
Rob