(25):列表優先於數組

數組是協變的(convariant),如果Sub是Super的子類型,那麼數組類型Sub[]就是Super[]的子類型。

Object[] obs=new Long[1];  
obs[0]="hhe";  
這是可以的

 泛型卻是不可變的,List<Sub>不是List<Super>的子類型。

List<Object> list=new ArrayList<Long>();//編譯錯誤
list.add("hhe"); 


數組是具體化的(reified),因此數組在運行時才知道並檢查它們的元素類型約束。
泛型則是通過擦除(erasure)來實現,因此泛型只在編譯時強化它們的類型信息,並在運行時丟棄(或者擦除)它們的元素類型約束。擦除就是使泛型可以與沒有使用泛型的代碼隨意進行互用。


所以一般來說,數值和泛型不能互用,所以發現錯誤第一反應就應該是用列表代替數值。

發佈了50 篇原創文章 · 獲贊 0 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章