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);
}
}
每当我们使用一个方法时,它只需要一个变量,大多数在方法签名的末尾。为什么会这样?
为什么我们不能使用多个变长参数?我正在从编译器的角度寻找答案。
答案 0 :(得分:3)
如果两个变量类型相同怎么办:
public static void m1(int...x, int...y) {
编译器应该在x
和y
之间拆分输入参数?我也不知道。编译器必须禁止这样做,因为没有好办法处理它。
变量arity(“varargs”)参数必须位于方法签名的末尾,以便编译器可以告诉哪些参数映射到哪些形式参数。除固定参数之外的任何参数都将发送到表示varargs参数的数组。
方法或构造函数的最后一个形式参数是特殊的:它 可以是变量arity参数,由下面的省略号表示 类型。
由于上述原因,它在JLS和编译器中强制执行。
答案 1 :(得分:2)
简而言之,不是you can't use more than one variable signature
。
答案 2 :(得分:1)
我的意思是,只要变量参数周围的参数类型的类型不同,编译器就不能这样做是没有理由的。毕竟,基本上只是将参数放入数组中的语法糖。
但从语言设计的角度来看,它可能只会造成比其价值更多的混乱/问题。
答案 3 :(得分:0)
varargs只能在method参数的末尾使用。你不能有两个varargs。
编译器无法仅使用逗号匹配参数和参数。