Nei documenti di App Engine , a cosa servono i puntini di sospensione ( JID...
) in questa firma del metodo?
public MessageBuilder withRecipientJids(JID... recipientJids)
Qual è la funzione di quei tre punti?
Nei documenti di App Engine , a cosa servono i puntini di sospensione ( JID...
) in questa firma del metodo?
public MessageBuilder withRecipientJids(JID... recipientJids)
Qual è la funzione di quei tre punti?
Risposte:
Quelli sono i vararg Java. Ti consentono di passare qualsiasi numero di oggetti di un tipo specifico (in questo caso sono di tipo JID).
Nel tuo esempio, le seguenti chiamate di funzione sarebbero valide:
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);
Scopri di più qui: http://java.sun.com/j2se/1.5.0/docs/guide/language/varargs.html
Il modo di usare i puntini di sospensione o i vararg all'interno del metodo è come se fosse un array:
public void PrintWithEllipsis(String...setOfStrings) {
for (String s : setOfStrings)
System.out.println(s);
}
Questo metodo può essere chiamato come segue:
obj.PrintWithEllipsis(); // prints nothing
obj.PrintWithEllipsis("first"); // prints "first"
obj.PrintWithEllipsis("first", "second"); // prints "first\nsecond"
All'interno PrintWithEllipsis
, il tipo di setOfStrings
è una matrice di String. Quindi potresti salvare un po 'di lavoro nel compilatore e passare un array:
String[] argsVar = {"first", "second"};
obj.PrintWithEllipsis(argsVar);
Per i metodi varargs , un parametro di sequenza viene considerato come un array dello stesso tipo. Quindi, se due firme differiscono solo per il fatto che una dichiara una sequenza e l'altra una matrice, come in questo esempio:
void process(String[] s){}
void process(String...s){}
quindi si verifica un errore di compilazione.
Fonte: la specifica del linguaggio di programmazione Java , in cui il termine tecnico è variable arity parameter
piuttosto che il termine comune varargs
.
La notazione a tre punti (...) è in realtà presa in prestito dalla matematica e significa "... e così via".
Per quanto riguarda il suo uso in Java, rappresenta varargs
, il che significa che è possibile aggiungere qualsiasi numero di argomenti alla chiamata del metodo. Le uniche limitazioni sono che varargs
deve essere alla fine della firma del metodo e può essercene solo una per metodo.
Questi sono varargs
utilizzati per creare un metodo che riceve un numero qualsiasi di argomenti.
Ad esempio il metodo PrintStream.printf lo utilizza, poiché non sai quanti argomenti utilizzeresti.
Possono essere usati solo come posizione finale degli argomenti.
varargs
è stato aggiunto su Java 1.5
Significa che il metodo accetta un numero variabile di argomenti ("varargs") di tipo JID
. All'interno del metodo, recipientJids
è presentato.
Questo è utile per i casi in cui hai un metodo che può opzionalmente gestire più di un argomento in modo naturale e ti consente di scrivere chiamate che possono passare uno, due o tre parametri allo stesso metodo, senza avere la bruttezza di creare un array al volo.
Permette anche modi di dire come sprintf
da C; vedi String.format()
, per esempio.
…
, Unicode U + 2026. NetBeans 8 in Java 8 riporta "carattere illegale". Così Java varargs richiedere la tripla e basta (periodo),...
.