What is the ellipsis (...) for in this method signature?
Для чего многоточие (...) в сигнатуре этого метода?
В документах App Engine указано, для чего используется многоточие (JID...) в сигнатуре этого метода?
public MessageBuilder withRecipientJids(JID... recipientJids)
Какова функция этих трех точек?
Переведено автоматически
Ответ 1
Это переменные Java. Они позволяют передавать любое количество объектов определенного типа (в данном случае они имеют тип JID).
В вашем примере допустимы следующие вызовы функций:
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);
Способ использования многоточия или переменных внутри метода такой, как если бы это был массив:
publicvoidPrintWithEllipsis(String...setOfStrings) { for (String s : setOfStrings) System.out.println(s); }
Этот метод можно вызвать следующим образом:
obj.PrintWithEllipsis(); // prints nothing obj.PrintWithEllipsis("first"); // prints "first" obj.PrintWithEllipsis("first", "second"); // prints "first\nsecond"
Внутри PrintWithEllipsis тип setOfStrings представляет собой массив строк. Таким образом, вы могли бы сэкономить компилятору часть работы и передать массив:
Для методов varargs параметр последовательности обрабатывается как массив того же типа. Итак, если две сигнатуры отличаются только тем, что одна объявляет последовательность, а другая - массив, как в этом примере:
Обозначение с тремя точками (...) на самом деле заимствовано из математики и означает "... и так далее".
Что касается его использования в Java, то оно расшифровывается как varargs, что означает, что к вызову метода может быть добавлено любое количество аргументов. Единственными ограничениями являются то, что varargs должно быть в конце сигнатуры метода, и их может быть только по одному на метод.
Ответ 4
Это varargs они используются для создания метода, который получает любое количество аргументов.
For instance PrintStream.printf method uses it, since you don't know how many would arguments you'll use.
They can only be used as final position of the arguments.