2010-07-30 124 views
0

我已經使用Arrays.asList幾十次,如果沒有數百次沒有問題。突然之前編譯代碼在從6.8切換到NetBeans 6.9後無法編譯。這裏有幾條問題:Arrays.asList編譯問題

Node n = new NickNode(4,5); 
Node m = new NonLocatableNode(); 
Node subclass = new NickSubclassNode(); 

List<Node> nodes = Arrays.asList(n,m,subclass); 

節點的子類並不重要;他們編譯得很好。給我一個錯誤的行是Arrays.asList行。我得到的錯誤

alt text http://grab.by/grabs/b553ffb898ca0874ef4741b8c87fc576.png

我不知道它是越來越約HelpCtx.Provider [] ...有誰看到什麼毛病這個片段什麼?

更換asList符合

List<Node> theNodes = new LinkedList<Node>(); 
theNodes.add(n); 
theNodes.add(m); 
theNodes.add(subclass); 

工作正常。但我更喜歡Arrays.asList的更短的語法

+0

它工作正常,我.. – Bozho 2010-07-30 13:03:44

+0

較短的解決方法可能會被繞過可變參數:'theNodes = Arrays.asList(新節點[] {N, m,subclass});' – 2010-07-30 14:50:43

回答

4

試一下這個

List<Node> nodes = Arrays.<Node>asList(n,m,subclass);  
+0

工作。我偶然發現了過去的這種語法(這真是太離奇了),但是從來沒有*必須在Arrays.asList聲明的上下文中使用它。通常類型推理工作正常。 – I82Much 2010-07-30 14:53:14

2

您的錯誤圖形不顯示給我,但它看起來像一個泛型的問題。當你從netbeans 6.8遷移到6.9時,編譯器警告是否可能轉換爲編譯器錯誤?

嘗試宣告你的列表,...

List<? extends Node> nodes = Arrays.asList(n, m, subclass); 

通配符語法指定列表中包含節點和任何繼承自Node。

+0

沒有解決問題 - 得到完全相同的錯誤。 – I82Much 2010-07-30 14:17:54

-1

它應該是:

List<? extends Node> nodes = Arrays.asList(n,m,subclass); 

謹記:

List<Sub Class> is not a sub class for List<Parent Class> 

它們是不同的類。

+0

n,m和子類都被聲明爲'Node'。運行時類型完全不相關。 – 2010-07-30 14:53:03

+0

@Mark:n,m和子類都聲明爲節點,但列表不是列表。那是你需要的方式?將Node擴展爲泛型類型。 – mhshams 2010-07-30 20:08:48

+0

你是對的,但在這種情況下它並不重要,因爲asList將返回一個列表,而不是List 。 – 2010-07-31 06:39:52

2

是的,你說得對,這是已經報道過的NetBeans 6.9中的錯誤。所以希望它很快就會解決。你可以看到,錯誤報告here

+0

請發佈錯誤報告的鏈接。 – 2010-07-30 13:35:00

+0

Rakesh,我發佈了bug鏈接。 – Rupeshit 2010-07-30 13:47:30

+0

請原諒我的無知,但那個錯誤報告似乎完全不相關。我沒有得到空指針異常。 – I82Much 2010-07-30 14:16:25