簡體   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