为什么varargs始终是方法签名中的最后一个参数?

时间:2012-02-21 06:00:21

标签: java parameters variadic-functions method-signature

为什么varargs必须是方法签名中的最后一个参数?

我想知道原因。

2 个答案:

答案 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的语言只允许出于相同的原因位于参数列表的末尾。