Учитывая, как используется метод с 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
и фамилия отсутствуют? Опять эта неоднозначность может быть решена, но за счет неуклюжего дополнительного синтаксиса.