W dokumentach App Engine , do czego służy ellipsis ( JID...
) w sygnaturze tej metody?
public MessageBuilder withRecipientJids(JID... recipientJids)
Jaka jest funkcja tych trzech kropek?
W dokumentach App Engine , do czego służy ellipsis ( JID...
) w sygnaturze tej metody?
public MessageBuilder withRecipientJids(JID... recipientJids)
Jaka jest funkcja tych trzech kropek?
Odpowiedzi:
To są varargs Java. Pozwalają przekazać dowolną liczbę obiektów określonego typu (w tym przypadku są one typu JID).
W twoim przykładzie poprawne byłyby następujące wywołania funkcji:
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);
Zobacz więcej tutaj: http://java.sun.com/j2se/1.5.0/docs/guide/language/varargs.html
Sposób użycia elipsy lub varargsa w metodzie jest taki, jakby to była tablica:
public void PrintWithEllipsis(String...setOfStrings) {
for (String s : setOfStrings)
System.out.println(s);
}
Metodę tę można wywołać w następujący sposób:
obj.PrintWithEllipsis(); // prints nothing
obj.PrintWithEllipsis("first"); // prints "first"
obj.PrintWithEllipsis("first", "second"); // prints "first\nsecond"
Wewnątrz PrintWithEllipsis
typ setOfStrings
jest tablicą ciągu znaków. Abyś mógł zapisać kompilatorowi trochę pracy i przekazać tablicę:
String[] argsVar = {"first", "second"};
obj.PrintWithEllipsis(argsVar);
W przypadku metod varargs parametr sekwencji jest traktowany jako tablica tego samego typu. Więc jeśli dwa podpisy różnią się tylko tym, że jeden deklaruje sekwencję, a drugi tablicę, jak w tym przykładzie:
void process(String[] s){}
void process(String...s){}
wtedy pojawia się błąd czasu kompilacji.
Źródło: specyfikacja języka programowania Java , w której termin techniczny jest variable arity parameter
raczej terminem wspólnym varargs
.
Notacja z trzema kropkami (...) jest zapożyczona z matematyki i oznacza „... i tak dalej”.
Jeśli chodzi o użycie w Javie, oznacza to, co oznacza varargs
, że do wywołania metody można dodać dowolną liczbę argumentów. Jedynymi ograniczeniami są to, że varargs
musi znajdować się na końcu podpisu metody i może być tylko jedna na metodę.
Są varargs
one używane do tworzenia metody, która odbiera dowolną liczbę argumentów.
Na przykład metoda PrintStream.printf używa go, ponieważ nie wiesz, ile argumentów użyjesz.
Można je wykorzystać tylko jako ostateczną pozycję argumentów.
varargs
został dodany do Java 1.5
Oznacza to, że metoda akceptuje zmienną liczbę argumentów („varargs”) typu JID
. W ramach metody recipientJids
przedstawiono.
Jest to przydatne w przypadkach, gdy masz metodę, która może opcjonalnie obsłużyć więcej niż jeden argument w naturalny sposób, i pozwala na pisanie wywołań, które mogą przekazać jeden, dwa lub trzy parametry do tej samej metody, bez brzydoty tworzenia tablica w locie.
Umożliwia także idiomy, takie jak sprintf
z C; patrz String.format()
na przykład.
…
, Unicode U + 2026. NetBeans 8 w Javie 8 zgłasza „nielegalny charakter”. Tak Java varargs wymagają potrójne kropkę (kropka),...
.