【发布时间】:2014-08-20 00:24:25
【问题描述】:
为什么不能编译?
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 方法?另外,如果您愿意,请提供一种方法来解决这个问题(即提供一种方法来传递此方法的变量参数或数组)。
【问题讨论】:
-
Works when I try it,除了
prints上缺少static。 -
您可能想阅读以下内容:stackoverflow.com/a/2926653/985949
-
你用的是什么编译器?
-
是的,当我创建一个实例并使用它调用
prints时也可以工作。 -
我已使用
static更新了该问题。现在它编译了(不敢相信我没有看到!>.
标签: java arrays variadic-functions primitive-types