为什么 Netbeans 看不到我指的是哪种 varargs 方法?



代码在第18行有问题n.fun1("11",1);在netbeans中,但在其他IDE中没有此问题,仅在netbeans 7.0.1中IDE显示:

对fun1的引用是有歧义的,两者都有fun1(java.lang.String,java.lang.Object…)在测试和方法中(java.lang.String,int,java.lang.Object…)在Test match

对应的代码如下:

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("11", 1); // fun1(String, int)中没有这样的方法,试试这个:

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

更新

重读你的问题后,我看到了真正的问题在这里。在你的接口中有两个fun1方法。
public void fun1(String str, Object... objs) // first

public void fun1(String str, int i, Object... objs); // second

问题是,当你调用你的类的方法:

n.fun1("11", 1);

IDE无法决定您是要调用第一个方法还是第二个方法。

因为,它可以是第一个将1参数自动装箱到Integer对象的。也可以是第二个,其中objs参数为空数组。

如果不修改接口,就没有办法修复这个问题。我的java编译器(1.6.0_26)可以编译它没有任何问题,它调用你的第二个方法。

但是IDE说有歧义,这是对的,这个定义很容易混淆,应该避免使用

我也面临同样的问题。我发现它已经报告给Netbeans团队了:https://netbeans.org/bugzilla/show_bug.cgi?id=200024

你的代码应该用JDK6编译,但不能用JDK7。根据Netbeans人员的说法,Java规范不允许在单个类中使用这两个方法。在他们看来,JDK6没有抱怨这个问题应该被认为是一个bug,这个bug已经在JDK7中修复了

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

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

您的netbeans使用的是哪个JDK ?会不会是一个老的(真的很老的)?

相关内容

  • 没有找到相关文章