java - List<?>, List, List<Object>, List<? extends Object>各有什么区别?
巴扎黑
巴扎黑 2017-04-17 17:42:19
0
4
652

List<?>, List, List<Object>, List<? extends Object>各有什么区别?

巴扎黑
巴扎黑

全部回覆(4)
Ty80

我感覺樓上幾位的理解都有問題, 首先, List>表示無界通配符, 並非表示任意類型, 而是表示一個具體類型, 但是這個具體類型是什麼我們編程的時候並不關心; List表示原生list, 沒有泛型參數的list, 這個沒有什麼可以說的, 不推薦使用; List 表示的是這個list存放的是Object, 只要是Object就可以放入; 最後List表示一個集合, 這個集合存放的是Object具體子類別中的某一種, 而非只要是object的子類別就可以放入.

最後我想說的一點是>其實和 extends Object>有點像, 這個像, 體現在他們可以互相匹配,並且不會產生任何警告 比如:

public class Base
{
    public static void unbounded(List<?> list){}
    public static void upBounded(List<? extends Object> list){}

    public static void main(String args[])
    {
        List<?> list1 = new ArrayList<Object>() ;
        List<? extends Object> list2 = new ArrayList<Object>() ;

        unbounded(list2) ;
        upBounded(list1) ;
    }
}

不過這些差異僅僅是在編譯時編譯器產生的, 到了運行時, 由於擦除, 全部都是List
我個人的一點理解

大家讲道理

List>List:說的是集合裡可以放任意類型的對象,單獨使用List的話,在Eclipse中會有警告;List<?>List:说的是集合里可以放任意类型的对象,单独使用List的话,在Eclipse中会有警告;

List<Object>:说的是集合里存放Object类型的对象,理解Java中的继承、及向上转型机制,不难发现这个集合其实可以保存任意类型的对象;

List<? extends Object

List:所說的是集合存放Object類型的對象,理解Java中的繼承、及向上轉型機制,不難發現這個集合其實可以保存任意類型的對象;

List extends Object>:說的是該集合中保存的物件必須是Object類別的子類別物件;#🎜🎜# #🎜🎜#具體可以參考《Java核心技術(第一卷)》關於泛型那部分的內容...#🎜🎜#
小葫芦

List是集合中的一種。
代表了泛型型別
List>代表任意型別
List表示這個集合中可以放object型別的物件
List extends Object>代表這個集合中可以放任何繼承於object類別的類型物件

如果想了解更多集合框架小姿勢,可以看看我寫的一篇專欄文章,裡面有一章是關於集合框架的

大家讲道理

**List>, List, List, List extends Object> 區別如下:
1.了解JDK中的泛型,泛型是為了做類型檢查,希望放在Collection中的東西,在編譯的時候通過限定中的類型,可以做到盡量在編譯時候檢查出錯誤,而不要再線上運行的時候再拋異常。
2.List這樣寫,在eclipse下面會有黃線,有警告的。而且也是不規範的寫法,其餘的都是規範的寫法。
3.List>可以放任何類型;List只可以放Object類型,但由於Object是所有類別的父類,所以其他類別都可以透過在前面加(Object)強制類型轉換,List也是,可以放任何類別或是Object類別本身。
希望對你有幫助~~**

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板