leo*_*lav 15 java eclipse compiler-construction
我已经定义:
public static int[] getArray( final int... params ) {
return params;
}
public static <T> T[] getArray( final T... params ) {
return params;
}
Run Code Online (Sandbox Code Playgroud)
我用这个
getArray( 1, 2 )
Run Code Online (Sandbox Code Playgroud)
现在我在eclipse 4.2中得到了编译错误:
方法对于类型是不明确的
但正如你所看到的,这并不含糊.我能做什么?
Ron*_*nie 24
据报道这是eclipse bug 383780中的一个错误.
以下是修复程序的文档:https:
//bugs.eclipse.org/bugs/attachment.cgi?id = 218320
基本上,修复编译器错误,获得最新的Eclipse版本(4.2.1截至目前),添加以下行后-vmargs在eclipse.ini:(那么你可能需要重新启动Eclipse和重建项目你)
-DtolerateIllegalAmbiguousVarargsInvocation=true
Run Code Online (Sandbox Code Playgroud)
话虽如此,Samuel是正确的:方法调用是模糊的.上面的代码示例之前有效,因为在1.6之前JDK中存在错误 ; 并且eclipse中的自定义编译器成功地模仿了这个bug.在开发Juno时,他们通过将模糊调用报告为错误来解决这个错误(因为JDK错误在1.7中得到修复),让许多人(包括我)烦恼.上面的修复程序要求您明确告诉eclipse"容忍非法的模糊Varargs调用".
实际上这是模棱两可的,因为java中的Autoboxing允许你调用一个期望int带有a的方法,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中,两个方法调用都是有效的)
| 归档时间: |
|
| 查看次数: |
24327 次 |
| 最近记录: |