Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Why does varargs have to be the last parameter in method signature?

I want to know the reason.

like image 311
Sam Avatar asked Feb 21 '12 06:02

Sam


2 Answers

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.

like image 117
Ignacio Vazquez-Abrams Avatar answered Sep 24 '22 03:09

Ignacio Vazquez-Abrams


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.

like image 23
mikera Avatar answered Sep 21 '22 03:09

mikera