搜尋

首頁  >  問答  >  主體

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

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

巴扎黑巴扎黑2888 天前654

全部回覆(4)我來回復

  • PHP中文网

    PHP中文网2017-04-17 17:44:19

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

    回覆
    0
  • 大家讲道理

    大家讲道理2017-04-17 17:44:19

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

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

    List<? extends Object

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

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

    回覆
    0
  • 高洛峰

    高洛峰2017-04-17 17:44:19

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

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

    回覆
    0
  • 大家讲道理

    大家讲道理2017-04-17 17:44:19

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

    回覆
    0
  • 取消回覆