var args 参数应该位于参数列表的最后

Sub*_*der -3 java variadic-functions

public void test(int... integers, String str) { // error
   ...  
}
Run Code Online (Sandbox Code Playgroud)

错误:

方法 test 的变量参数类型 int 必须是最后一个参数。

public void test(String str, int... integers) {}
Run Code Online (Sandbox Code Playgroud)

效果很好。这有什么原因吗?

Roh*_*ain 6

好吧,考虑这个方法签名:

public void test(int... integers, float val, float val2)
Run Code Online (Sandbox Code Playgroud)

现在,当您调用此方法时:

test(2, 3, 4, 5, 6, 7);
Run Code Online (Sandbox Code Playgroud)

编译器将如何决定何时停止向int...类型参数添加实参?请记住,参数是left-to-right在 Java 中计算的。这就是为什么var-args应该放在最后。因此,该编译器可以首先分配固定参数,然后将其余参数分配给var-args.

  • 为什么编译器看不到 6 和 7 一定是浮点参数,因此 2,3,4,5 是整数?请注意,参数在运行时仍将从左到右进行评估。只要只有一个可变参数,它就可以位于参数列表中的任何位置。其他一切都暗示着懒惰的编译器编写者。 (2认同)