2011-12-19 62 views
2

當我寫了下面的代碼編譯說無法從ArrayList中<String>轉換到列表<Comparable>

不能從ArrayList<String>轉換爲List<Comparable>

private List<Comparable> get(){ 
    return new ArrayList<String>(); 
} 

但是,當我寫的返回類型通配符,代碼編譯。

private List<? extends Comparable> get() { 
    return new ArrayList<String>(); 
} 

有人可以解釋我爲什麼嗎?

+0

這是一個很好的仿製藥資源:[http://www.angelikalanger.com/GenericsFAQ/JavaGenericsFAQ.html](http://www.angelikalanger.com/GenericsFAQ/JavaGenericsFAQ.html) – 2011-12-19 14:29:16

回答

6

A List<String>不是List<Comparable>
畢竟,您可以將Integer放入List<Comparable>

+0

但我可以把一個整數到List <?擴展Comparable> – 2011-12-19 14:07:49

+2

@ narek.gevorgyan,但如果嘗試,則會出現編譯錯誤。 – 2011-12-19 14:08:59

+0

啊,謝謝)我想我現在明白了。另外我會嘗試閱讀@binary_runner – 2011-12-19 14:10:41

1

字符串不是一個可比較的是它擴展了Comparable的東西。

例如

List<String> list1 = new ArrayList<String>(); 
List<Comparable> list2 = list1; // does not compile. 
list2.add(1); // if this program compiled you would have a 1 in the list of String. 
-2

原因是第二部分是你真正想要的:一個擴展了Comparable的類(String)。由於Comparable是一個接口,你不能有一個Comparable對象,只是一個實現它的類。這是什麼列表<?擴展Comparable >告訴Java尋找。

希望它有一點幫助。

亞歷

+1

這完全是錯誤的。 – SLaks 2011-12-19 14:12:40

2

由於List<Comparable>可以具有添加的Comparable任何實例它,例如一個Integer。但是,ArrayList<String>僅允許包含String實例。允許將其用作List<Comparable>會破壞類型安全。

相關問題