Учитывая, как используется метод с var args, любой другой формат может привести к двусмысленности. Имея varargs последний предотвращает возможные двусмысленности, не требуя дополнительного синтаксиса для устранения двусмысленностей, что уменьшит преимущество функции.
Рассмотрим объявление метода последующей:
public void varargsAreCool(String surname, String firstname,
String... nicknames) {
// some cool varargs logic
}
При использовании как varargsAreCool("John", "Smith")
, очевидно, что John Smith
не имеет прозвища. При использовании как это varargsAreCool("Andrew", "Jones", "The Drew", "Jonesy")
.
Теперь рассмотрим следующую недопустимое объявление метода:
public void varargsAreCool(String surname, String... nicknames,
String firstname) {
// some cool varargs logic
}
Когда используется как varargsAreCool("John", "Smith")
это прозвище Smith
Джона или его фамилия? Если это его фамилия, как я могу указать, что у него нет прозвищ? Для этого вам, вероятно, придется использовать метод, подобный этому varargsAreCool("John", new String[]{}, "Smith")
, который неудобен и несколько поражает цель этой функции.
При использовании здесь varargsAreCool("Andrew", "The Drew", "Jonesy", "Jones")
The Drew, Jonesy and Jones
все прозвища и фамилия отсутствуют? Снова эта неоднозначность может быть решена, но ценой неуклюжего дополнительного синтаксиса.
Как правило, ответ «Потому что те являются правила». Правила - это правила.Почему это важно * почему * существуют правила? Какая у вас проблема? –
@ S.Lott: Я согласен, но мне все еще любопытно, насколько обосновано решение Sun. –
Всякий раз, когда я вижу сообщение об ошибке, я получаю такое чувство, что делаю что-то неправильно. Что я делаю неправильно здесь, кроме нарушения правила? –