У документах App Engine , для чого підписаний еліпсис ( JID...
) у цьому способі?
public MessageBuilder withRecipientJids(JID... recipientJids)
Яка функція цих трьох крапок?
У документах App Engine , для чого підписаний еліпсис ( JID...
) у цьому способі?
public MessageBuilder withRecipientJids(JID... recipientJids)
Яка функція цих трьох крапок?
Відповіді:
Це вараги 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);
Детальніше дивіться тут: http://java.sun.com/j2se/1.5.0/docs/guide/language/varargs.html
Спосіб використання еліпсису або варагрів всередині методу такий, як ніби це масив:
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 вимагає змінною довжиною потрійний повної зупинки (період),...
.