В документации App Engine, что означает многоточие (JID...
) в этой сигнатуре метода?
public MessageBuilder withRecipientJids(JID... recipientJids)
Какова функция этих трех точек?
В документации App Engine, что означает многоточие (JID...
) в этой сигнатуре метода?
public MessageBuilder withRecipientJids(JID... recipientJids)
Какова функция этих трех точек?
Это Java varargs. Они позволяют передавать любое количество объектов определенного типа (в данном случае они относятся к типу 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);
Подробнее см. Здесь: http://java.sun.com/j2se/1.5.0/docs/guide/language/varargs.html
Можно использовать многоточие или varargs внутри метода, как если бы это был массив:
public void PrintWithEllipsis(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
- это массив String. Таким образом, вы можете сэкономить компилятору некоторую работу и передать массив:
String[] argsVar = {"first", "second"};
obj.PrintWithEllipsis(argsVar);
Для методов varargs параметр последовательности обрабатывается как массив того же типа. Итак, если две подписи отличаются только тем, что одна объявляет последовательность, а другая - массив, как в этом примере:
void process(String[] s){}
void process(String...s){}
тогда возникает ошибка времени компиляции.
Источник: Спецификация языка программирования Java, где технический термин variable arity parameter
, а не общий термин varargs
.
Обозначение с тремя точками (...) фактически заимствовано из математики и означает «... и так далее».
Что касается его использования в Java, это означает varargs
, что означает, что к вызову метода можно добавить любое количество аргументов. Единственное ограничение состоит в том, что varargs
должен стоять в конце сигнатуры метода и может быть только один для каждого метода.
Это varargs
, они используются для создания метод, который получает любое количество аргументов.
Например, PrintStream.printf использует его, так как вы не знаете, сколько аргументов вы будете использовать.
Их можно использовать только в качестве финальной позиции аргументов.
varargs
был добавлен в Java 1.5
Это означает, что метод принимает переменное количество аргументов ("varargs") типа JID
. Внутри метода представлен recipientJids
.
Это удобно для случаев, когда у вас есть метод, который может опционально обрабатывать более одного аргумента естественным образом, и позволяет писать вызовы, которые могут передавать один, два или три параметра одному и тому же методу, без уродства создания массив на лету.
Это также позволяет использовать такие идиомы, как sprintf
из C; см., например, String.format()
.
…
, Unicode U + 2026. NetBeans 8 в Java 8 сообщает о недопустимом символе. Таким образом, Java varargs требует тройной FULL STOP (точка)...
. - person Basil Bourque   schedule 25.01.2015