代码在第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);
}
}
答案 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?它可能是一个旧的(真的很老)吗?