Java 为什么';Netbeans知道我的varargs方法是什么吗?

Java 为什么';Netbeans知道我的varargs方法是什么吗?,java,eclipse,netbeans,Java,Eclipse,Netbeans,代码第18行n.fun1(“11”,1)中存在问题;在netbeans中,而不是在其他IDE中,此问题仅在netbeans 7.0.1 IDE中显示: 对fun1的引用不明确,这两种方法 测试和方法中的fun1(java.lang.String、java.lang.Object…) 测试匹配中的fun1(java.lang.String、int、java.lang.Object…) 相应的代码如下: interface Test { public void fun1(String str

代码第18行n.fun1(“11”,1)中存在问题;在netbeans中,而不是在其他IDE中,此问题仅在netbeans 7.0.1 IDE中显示:

对fun1的引用不明确,这两种方法 测试和方法中的fun1(java.lang.String、java.lang.Object…) 测试匹配中的fun1(java.lang.String、int、java.lang.Object…)

相应的代码如下:

interface Test {
    public void fun1(String str, Object... objs);
    public void fun1(String str, int i, Object... objs);
}
public class NewClass implements Test {
    public void fun1(String str, Object... objs) {
        System.out.println("111111111111111111111");
    }
    public void fun1(String str, int i, Object... objs) {
        System.out.println("2222222222222");
    }
    public static void main(String[] args) {
        Test n = new NewClass();
        n.fun1("11", 1);
    }
}
更新

在重读你的问题之后,我可以看到这里真正的问题。界面中有两个
fun1
方法

public void fun1(String str, Object... objs) // first

问题是,在哪里调用类的方法:

n.fun1("11", 1);
IDE无法决定是调用第一个方法还是第二个方法

因为,它可以是第一个将
1
参数自动装箱到
Integer
对象的方法。或者它可以是第二个,使用
objs
参数作为空数组

在不修改界面的情况下,无法修复此问题。我的java编译器(1.6.026)可以毫无问题地编译它,并调用第二个方法


但是,正如IDE所说的,它是不明确的,这是正确的,这个定义令人困惑,应该避免使用。

在您的界面中没有这样的方法
fun1(“11”,1);//fun1(字符串,int)
,请尝试以下操作:

n.fun1("11", new Integer(1));

您的netbeans使用哪种JDK?这可能是一个旧的(真的旧的)问题吗?

我面临着同样的问题。 我发现已经在这里向Netbeans团队报告了:

您的代码应该使用JDK6编译,而不是使用JDK7。 根据Netbeans的说法,Java规范不允许在一个类中使用这两个方法。 在他们看来,JDK6没有抱怨这一事实应该被视为一个bug,JDK7已经修复了这个bug

这就是为什么他们回答说他们不会在Netbeans中删除(或使其成为可选)此功能。即使在使用JDK6时看起来有点不一致


在我的例子中,我们重命名了这两个方法中的一个,以便与JDK7兼容。

1。如果您希望这样做,请提供行号。2.请提供所获得错误的堆栈跟踪。这看起来像是Netbeans错误-它应该使用第二个方法。整数构造函数无效,请参阅使用
Integer.valueOf()
,如我之前所述。有一个方法使用字符串和int(以及任意数量的对象,包括none)-第二个。实际上,我只在netneans 7.0.1中找到它,不是
null
,而是一个空数组。谢谢,但事实上,它在eclipse中工作(使用jdk 5或jdk 6 update 11)。我认为是netbeans 7.0.1使用一些argc构建java源代码;是的,因为它是有效的,但令人困惑。正如您所看到的,NetBeans也很困惑。
n.fun1("11", new Integer(1));