为什么 NetBeans 预编译器会为此发出警告?
public class PrimitiveVarArgs
{
public static void main(String[] args)
{
int[] ints = new int[]{1, 2, 3, 4, 5};
prints(ints);
}
static void prints(int... ints)
{
for(int i : ints)
System.out.println(i);
}
}
它抱怨第 5 行,说:
Confusing primitive array passed to vararg method
但据我(和 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
在查看 NetBeans 提示设置后,我发现它是这样说的:
传递给可变参数方法的原始数组不会被解包,并且它的项目不会被视为被调用方法中可变长度参数的项目。相反,该数组将作为单个项目传递。
但是,当我运行文件时(因为它只是一个警告而不是错误),我得到了我期望的输出:
1
2
3
4
5
那么,为什么 NetBeans 不喜欢我将本机数组传递给 varargs 方法呢?