繁体   English   中英

“方法对于类型是不明确的”但是类型不是模糊的(错误来自从Eclipse 3.7.2升级到eclipse 4.2)

[英]“method is ambiguous for the type” but the types are NOT ambiguous (and the error comes by upgrade from eclipse 3.7.2 to 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 bug 383780中的一个错误。
以下是修复程序的文档: https//bugs.eclipse.org/bugs/attachment.cgi?id = 218320

基本上,要修复编译器错误,获取最新的eclipse版本(截至目前为4.2.1 ),在eclipse.ini -vmargs之后添加以下行:(那么你可能需要重新启动eclipse并重建项目)

-DtolerateIllegalAmbiguousVarargsInvocation=true

话虽如此,Samuel是正确的:方法调用是模糊的。 上面的代码示例之前有效,因为在1.6之前JDK中存在错误 ; 并且eclipse中的自定义编译器成功地模仿了这个bug。 在开发Juno时,他们通过将模糊调用报告为错误来解决这个错误 (因为JDK错误在1.7中得到修复),让许多人(包括我)烦恼。 上面的修复程序要求您明确告诉eclipse“容忍非法的模糊Varargs调用”。

实际上这是不明确的,因为java中的Autoboxing允许你调用一个期望带有Integerint的方法,反之亦然,所以getArray( 1, 2 )实际上可以是对你的任何方法的有效调用。

据我了解你在做什么,你想要一个实用工具方法来创建一个任何数组。 也许你能做的最简单的事情就是将处理int的方法重命名为getIntArray() 或者只使用new int[] {1, 2} ,如果你想要一个int数组new int[] {1, 2}它是非常易读的。

您可以在http://docs.oracle.com/javase/specs/jls/se5.0/jls3.pdf中的语言规范中找到此信息(在您的情况下,确定调用的方法将转到步骤3第15.12.2节“编译时间步骤2:确定方法签名”中描述的过程,因为您使用了arity变量,并且在步骤3中,两个方法调用都是有效的)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM