Why is varargs always the last parameter in a method signature?

守給你的承諾、 提交于 2019-12-04 08:47:12

Because it makes the compiler's life simpler. There's no real reason why it couldn't have more arguments after, but it would require a much more complex compiler and so the spec was written that way.

The main reason is because it would be potentially ambiguous otherwise....

For example, how could the compiler tell whether arguments are varargs or separate named arguments in a long list of arguments with multple varargs?

Imagine a method signature like:

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

If you do printNames("Lucy", "Jo", "Paul") is Jo a boy or a girl?

As another example of ambiguity, having varargs earlier in the argument list could cause problems when there are overloaded methods. For example:

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

How can the compiler tell whether the second-to-last argument is a grapefruit or an additional apple?

Note that this isn't unique to Java, most languages that support varargs only allow then to be at the end of the argument list for the same reason.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!