2
class test {
    public static void m1(int...x,double...y) {
        /* some code here */
    }  

     public static void main(String args[]){
         m1();
         m1(10,20,3.5);
         m1(20,2.5,3.5,4.5);
     }
}

每当我们使用一种方法时,它只需要一个变量,主要是在方法签名的末尾。为什么会这样?

为什么我们不能使用多个可变长度参数?我正在从编译器的角度寻找答案。

4

4 回答 4

3

如果两个变量类型相同怎么办:

public static void m1(int...x, int...y) {

编译器应该在哪里拆分和之间的输入x参数y?我也不知道。编译器必须不允许这样做,因为没有好的方法来处理它。

变量 arity ("varargs") 参数必须位于方法签名的末尾,以便编译器可以判断哪些参数映射到哪些形式参数。超出固定参数的任何参数都将发送到表示可变参数参数的数组。

JLS 第 8.4.1 节说:

方法或构造函数的最后一个形式参数是特殊的:它可能是一个可变参数,由类型后面的省略号表示。

由于上述原因,它在 JLS 和编译器中被强制执行。

于 2013-10-04T19:15:07.527 回答
2

简而言之,不you can't use more than one variable signature

于 2013-10-04T19:17:24.960 回答
1

我的意思是,只要可变参数周围的参数类型不同,编译器就没有理由不能这样做。毕竟,它本质上只是将参数放入数组的语法糖。

但从语言设计的角度来看,它可能只会引起比它的价值更多的混乱/问题。

于 2013-10-04T19:21:59.067 回答
0

varargs 只能在方法参数的末尾使用。你不能有两个可变参数。

编译器不能单独用逗号匹配参数和参数..

于 2013-10-04T19:19:17.513 回答