为什么varargs
必须是方法签名中的最后一个参数?
我想知道原因。
答案 0 :(得分:15)
因为它使编译器的生活更简单。没有真正的理由为什么之后不能拥有更多的参数,但它需要更复杂的编译器,所以规范是这样编写的。
答案 1 :(得分:10)
主要原因是因为它可能含糊不清,否则....
例如,编译器如何判断参数是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的语言只允许出于相同的原因位于参数列表的末尾。