为什么Netbeans没有看到我的哪种方法?我的意思是什么?

时间:2011-08-16 06:37:35

标签: 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, 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);
    }
}

4 个答案:

答案 0 :(得分:2)

您的界面fun1("11", 1); // fun1(String, int)中没有此类方法,请尝试以下方法:

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

答案 1 :(得分: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说它是模棱两可并且它是正确的,这个定义令人困惑,应该避免。

答案 2 :(得分:1)

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

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

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

就我而言,我们重命名了两种方法中的一种,以便符合JDK7。

答案 3 :(得分:0)

您的netbeans使用哪种JDK?它可能是一个旧的(真的很老)吗?