为什么不可能在方法中采用多个变量参数参数?

时间:2013-10-04 19:11:16

标签: java compiler-construction jvm

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 个答案:

答案 0 :(得分:3)

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

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

编译器应该在xy之间拆分输入参数?我也不知道。编译器必须禁止这样做,因为没有好办法处理它。

变量arity(“varargs”)参数必须位于方法签名的末尾,以便编译器可以告诉哪些参数映射到哪些形式参数。除固定参数之外的任何参数都将发送到表示varargs参数的数组。

JLS, Section 8.4.1,说:

  

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

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

varargs只能在method参数的末尾使用。你不能有两个varargs。

编译器无法仅使用逗号匹配参数和参数。