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