Почему varargs всегда последний параметр в сигнатуре метода?
Почему varargs
должен быть последним параметром в сигнатуре метода?
Я хочу знать причину.
2 ответа
Потому что это делает жизнь компилятора проще. Нет никакой реальной причины, по которой у него не могло бы быть больше аргументов после этого, но это потребовало бы гораздо более сложного компилятора, и поэтому спецификация была написана таким образом.
Основная причина в том, что в противном случае это было бы потенциально неоднозначно....
Например, как компилятор может определить, являются ли аргументы 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, позволяют только тогда находиться в конце списка аргументов по той же причине.