2010-02-28 45 views
1

而在Java編譯程序我得到了這個大警告這個錯誤描述是什麼意思?

警告:[選中]選中調用 鏈表(java.util.Collection中)爲原料 型java.util.LinkedList中

成員
在這條線

LinkedList<Integer> li2 = new LinkedList(li); 

這是什麼意思的警告?

編輯:

應該已經INFACT:LinkedList<Integer> li2 = new LinkedList<Integer>(li);

不過還是請你回答這個問題。

+1

嘿約阿希姆,你的編輯徹底改變了這個問題,即「應該是事實上」的一部分。他希望特別使用原始類型,但是通過在編輯中對其進行參數化來「糾正」他。 – polygenelubricants 2010-02-28 15:13:52

+0

另請參閱http://groups.google.com/group/comp.lang.java.help/browse_frm/thread/7acc88716a44eb4a – trashgod 2010-02-28 17:43:58

回答

3

原始類型未選中。使用

LinkedList<Integer> li2 = new LinkedList<Integer>(li); 

你不應該在新代碼中使用原始類型。它只提供了後向的兼容性原因。見JLS 4.8

爲了促進與非通用舊代碼交互,但也可以作爲一種類型使用擦除(§4.6)的參數化類型的(§4.5)。這種類型被稱爲原始類型。

僅允許使用原始類型作爲遺留代碼兼容性的讓步。強烈建議在將通用性引入到Java編程語言後編寫的代碼中使用原始類型。 未來版本的Java編程語言可能會禁止使用原始類型。

重點是他們的,不是我的。


你增加了一個修正原來的問題暗示你要專門與原始類型的工作。這似乎違背了泛型提供的類型安全的目的,但您始終可以使用List<Object>來完成此操作。它不再是原始的,所以它將在未來保證工作,但它確實不會給你任何類型的安全。

根據上下文,還可以對無界通配符執行List<?>

0

LinkedList的,當你調用構造函數是這樣的:

LinkedList<Integer> li2 = new LinkedList<Integer>(li); 

原始類型是具有類型參數類型,但沒有論點被使用。它由於遺留原因而受到支持,但您不應該在新代碼中使用它。

+0

我沒有什麼不同?!? – JordyOnrust 2010-02-28 15:04:05

+0

@ Bright010957:對不起,我的錯:我忘了重要的一部分。 – 2010-02-28 15:05:46