为什么不能编译?
public class PrimitiveVarArgs
{
public static void main(String[] args)
{
int[] ints = new int[]{1, 2, 3, 4, 5};
prints(ints);
}
void prints(int... ints)
{
for(int i : ints)
System.out.println(i);
}
}
它抱怨第5行,说:
method prints in class PrimitiveVarArgs cannot be applied to given types;
required: int[]
found: int[]
reason: varargs mismatch; int[] cannot be converted to int
但就我(and others on SO)所知,int...
与int[]
相同。如果它是非基本类型(例如String
),而不是基元,则可以使用。
我甚至无法添加此方法:
void prints(int[] ints)
{
for(int i : ints)
System.out.println(i);
}
因为编译器说:
name clash: prints(int[]) and prints(int...) have the same erasure
cannot declare both prints(int[]) and prints(int...) in PrimitiveVarArgs
所以,为什么Java不允许你将原生数组传递给varargs方法?另外,如果你愿意,请给我一个解决这个问题的方法(即提供一种方法)将变量参数或数组传递给此方法。)
答案 0 :(得分:10)
将此问题修复到您的代码中并且它可以正常工作:
static void prints(int... ints) // notice the static keyword at the beginning!
问题不在于varargs,而在于你从静态上下文中调用实例方法的方式。另外,请确保没有其他具有冲突签名的方法,例如这两种方法看起来与编译器相同:
void prints(int... ints)
void prints(int[] ints)