Java &引用;方法对于类型“不明确”;但是类型并不含糊(错误来自于从Eclipse3.7.2升级到Eclipse4.2)

Java &引用;方法对于类型“不明确”;但是类型并不含糊(错误来自于从Eclipse3.7.2升级到Eclipse4.2),java,eclipse,compiler-construction,Java,Eclipse,Compiler Construction,我定义了: public static int[] getArray( final int... params ) { return params; } public static <T> T[] getArray( final T... params ) { return params; } 现在我在eclipse 4.2中看到编译错误: 方法对于类型不明确 但正如你所看到的,这并不含糊。我能做什么?事实上这是不明确的,因为在java中,允许您调用一个方法,该方法

我定义了:

public static int[] getArray( final int... params ) {
    return params;
}
public static <T> T[] getArray( final T... params ) {
    return params;
}
现在我在eclipse 4.2中看到编译错误:

方法对于类型不明确


但正如你所看到的,这并不含糊。我能做什么?

事实上这是不明确的,因为在java中,允许您调用一个方法,该方法期望
int
整数,反之亦然,因此
getArray(1,2)
确实可以是对任何方法的有效调用

就我所知,您需要一个实用方法来创建一个数组。也许最简单的方法就是将处理
int
的方法重命名为
getIntArray()
。或者只要使用
newint[]{1,2}
就可以了,如果你想要
int
数组的话,这是非常可读的


您可以在以下位置的语言规范中找到此信息(在您的情况下,确定调用的方法将转到第15.12.2节编译时步骤2:确定方法签名中描述的过程的步骤3,因为您使用了arity变量,并且在步骤3,两个方法调用都是有效的)

这在eclipse中被报告为一个bug。
以下是修复程序的文档:

基本上,要修复编译器错误,请获取最新的eclipse版本(从现在开始),在
eclipse.ini
中的
-vmargs
之后添加以下行:(然后可能需要重新启动eclipse并重建项目)


尽管如此,Samuel是正确的:方法调用是不明确的。上面的代码示例以前工作过,因为1.6之前的JDK中存在一个错误;eclipse中的自定义编译器成功地模仿了这个bug。在开发Juno时,他们通过将模棱两可的调用报告为错误来修复(因为JDK bug在1.7中得到了修复),这让很多人(包括我)感到恼火。上面的修复程序要求您明确告诉eclipse“容忍非法的不明确的Varargs调用”。

编译器可能试图应用自动装箱,在这种情况下,它无法选择您的任何方法。我不确定,但您可以尝试显式地抛出您的参数:
getArray((int)1,(int)2)
请使用适当的语言(Java?C#?)标记。顺便说一下,JDK1.7中的javac同意Eclipse4.2,这也看到了,我不认为这是清楚的。在升级到Eclipse4.2(以前的Eclipse3.7.2)之前,我们有使用jdk6编译级别构建的相同项目设置,并且在构建时没有错误。自动装箱已在以前的配置中使用。为什么升级会带来这个问题?@user1430985我添加了对规范的引用,这解释了行为。如果我相信这个规范的话,您的项目已经从早期版本的eclipse编译器中的一个bug中独立出来了
getArray( 1, 2 )
-DtolerateIllegalAmbiguousVarargsInvocation=true