Почему varargs всегда последний параметр в сигнатуре метода? - PullRequest
5 голосов
/ 21 февраля 2012

Почему varargs должен быть последним параметром в сигнатуре метода?

Я хочу знать причину.

Ответы [ 2 ]

16 голосов
/ 21 февраля 2012

Потому что это делает жизнь компилятора проще.Нет никакой реальной причины, по которой не может иметь больше аргументов после, но для этого потребуется гораздо более сложный компилятор, поэтому спецификация была написана таким образом.

10 голосов
/ 21 февраля 2012

Основная причина в том, что потенциально неоднозначно в противном случае ....

Например, как компилятор может определить, являются ли аргументы varargs или отдельными именованными аргументами в длинном списке аргументов с несколькими переменными varargs?

Представьте себе подпись метода, например:

printNames(String... girls, String... boys);

Если вы делаете printNames("Lucy", "Jo", "Paul"), Джо - мальчик или девочка?

В качестве еще одного примера двусмысленности, наличие varargs ранее в списке аргументов может вызвать проблемы при наличии перегруженных методов. Например:

printFruit(String... apples, String orange);
printFruit(String... apples, String grapefruit, String orange);

Как компилятор может определить, является ли второй или последний аргумент грейпфрутом или дополнительным яблоком?

Обратите внимание, что это не уникально для Java, большинство языков, которые поддерживают varargs, только по той же причине позволяют находиться в конце списка аргументов.

...