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 PrintWithEllipsistyp setOfStringsjest 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 parameterraczej 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 varargsmusi znajdować się na końcu podpisu metody i może być tylko jedna na metodę.
Są varargsone 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.
varargszostał dodany do Java 1.5
Oznacza to, że metoda akceptuje zmienną liczbę argumentów („varargs”) typu JID. W ramach metody recipientJidsprzedstawiono.
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 sprintfz 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),....