代码在第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 ?会不会是一个老的(真的很老的)?