繁体   English   中英

为什么 Netbeans 看不到我的意思是我的哪个可变参数方法?

[英]Why doesn't Netbeans see which of my varargs-method I mean?

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

reference to fun1 is ambiguous, both method fun1(java.lang.String,java.lang.Object...) in Test and method fun1(java.lang.String,int,java.lang.Object...) in Test匹配

对应的代码在这里:

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) fun1("11", 1); // fun1(String, int) ,试试这个:

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

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

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

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

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

更新

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

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

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

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

n.fun1("11", 1);

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

因为,它可能是第一个将您的1参数自动装箱为Integer object。 或者它可以是第二个,将objs参数作为一个空数组。

如果不修改您的界面,就无法解决此问题。 我的 java 编译器(1.6.0_26)可以毫无问题地编译它,它会调用您的第二种方法。

但正如 IDE 所说的模棱两可,而且这是正确的,这个定义令人困惑,应该避免。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM