Почему varargs
должен быть последним параметром в сигнатуре метода?
Я хочу знать причину.
Почему varargs
должен быть последним параметром в сигнатуре метода?
Я хочу знать причину.
C family of language
создателями здесь [C Family Interview](gotw.ca/publications/c_family_interview.htm), где Гослинг говорит, что у меня было личное правило: в общем и целом я ничего не добавлял только потому, что считал это крутым. Поскольку у меня все время было сообщество пользователей, я ждал, пока несколько человек не ополчатся на меня, прежде чем что-то вставлять. или три человека подошли ко мне и сказали, что это должна сделать Java. Тогда я бы начал говорить, ну, может быть, люди действительно будут его использовать. 21.02.2012 Потому что это упрощает жизнь компилятору. Нет реальной причины, по которой он не мог иметь больше аргументов после этого, но для этого потребовался бы гораздо более сложный компилятор, поэтому спецификация была написана таким образом.
Основная причина в том, что в противном случае это было бы потенциально неоднозначно....
Например, как компилятор может определить, являются ли аргументы переменными или отдельными именованными аргументами в длинном списке аргументов с несколькими переменными?
Представьте сигнатуру метода, например:
printNames(String... girls, String... boys);
Если вы сделаете printNames("Lucy", "Jo", "Paul")
, Джо будет мальчиком или девочкой?
Еще один пример двусмысленности: наличие переменных vararg в начале списка аргументов может вызвать проблемы при наличии перегруженных методов. Например:
printFruit(String... apples, String orange);
printFruit(String... apples, String grapefruit, String orange);
Как компилятор может определить, является ли предпоследний аргумент грейпфрутом или дополнительным яблоком?
Обратите внимание, что это не уникально для Java, большинство языков, которые поддерживают varargs, позволяют только затем быть в конце списка аргументов по той же причине.
code
, а все остальные вnames
. 21.02.2012