我已经定义:
public static int[] getArray( final int... params ) {
return params;
}
public static <T> T[] getArray( final T... params ) {
return params;
}
我用这个
getArray( 1, 2 )
现在我在 eclipse 4.2 中得到编译错误:
方法对于类型不明确
但正如你所看到的,这并不模棱两可。我能做些什么?
我已经定义:
public static int[] getArray( final int... params ) {
return params;
}
public static <T> T[] getArray( final T... params ) {
return params;
}
我用这个
getArray( 1, 2 )
现在我在 eclipse 4.2 中得到编译错误:
方法对于类型不明确
但正如你所看到的,这并不模棱两可。我能做些什么?
这被报告为 eclipse错误 383780中的错误。
这是修复的文档:
https ://bugs.eclipse.org/bugs/attachment.cgi?id=218320
基本上,要修复编译器错误,请获取最新的 eclipse 版本(截至目前为4.2.1-vmargs ),在in之后添加以下行eclipse.ini:(然后您可能需要重新启动 eclipse 并重建您的项目)
-DtolerateIllegalAmbiguousVarargsInvocation=true
话虽如此,Samuel 是正确的:方法调用是模棱两可的。上面的代码示例之前可以工作,因为 JDK 1.6 之前存在错误;并且 eclipse 中的自定义编译器成功地模仿了这个错误。在开发 Juno 时,他们通过将模棱两可的调用报告为错误来修复了这个错误(因为 JDK 错误已在 1.7 中修复),这让很多人(包括我)感到恼火。上面的修复要求您明确告诉 eclipse “容忍非法的歧义可变参数调用”。
实际上这是模棱两可的,因为java 中的Autoboxing允许您调用一个期望 an 的方法,int反之亦然Integer,因此getArray( 1, 2 )实际上可以是对您的任何方法的有效调用。
据我了解您在做什么,您希望有一个实用方法来创建一个数组。也许您可以做的最简单的事情是将处理的方法重命名int为getIntArray(). 或者如果你想要一个数组,就使用new int[] {1, 2}它非常易读。int
您可以在http://docs.oracle.com/javase/specs/jls/se5.0/jls3.pdf的语言规范中找到此信息(在您的情况下,确定调用的方法将转到第 3 步15.12.2 编译时步骤 2:确定方法签名中描述的过程,因为您使用了 arity 变量,并且在步骤 3 中,两个方法调用都是有效的)