列表優於數組(25)

一、數組是協變的(covariant)數組

  • 若是Sub 是Super 的子類型,那麼Sub[] 也是Super[] 的子類型
  • 數組有缺陷
  • 以下:運行時纔會報錯

二、泛型是不可變的(invariant)安全

  • List<Object>不是List<String> 的父類
  • 以下:編譯期就會報錯

三、數組是具體化的性能

  • 運行時纔會檢查數據類型

四、泛型經過擦除來實現的blog

  • 編譯時強化類型信息,運行時擦除類型信息
  • 擦除使得泛型與沒有使用泛型的代碼能夠進行互用

五、泛型和數組不能很好地混用編譯

  • 泛型數組之因此非法,因爲它不是類型安全的

六、不可具體化類型ast

  • 好比:E、List<E>、List<String> 
  • 運行時包含的信息比編譯時要少

七、惟一可具體化的參數化類型:無限制通配符類型 List<?> Map<?,?>泛型

  • 建立無限制通配符類型數組是合法的
  • 雖然不經常使用

八、使用可變參數和泛型時會有一個費解的警告List

  • 每當調用可變參數方法時,會使用數組來存參數
  • 數組元素類型不是可具體化的,就會獲得警告
  • 除了禁止它,別無他法

九、優先使用泛型數據類型

  • 可能會損失一些性能和簡潔性
  • 但換回來的是更高的類型安全性和互用性

不能編譯經過:方法

編譯經過,會獲得一個警告(unchecked cast found):

  • 泛型運行時會被擦除,

十、以下即可以編譯時無任何警告和錯誤

相關文章
相關標籤/搜索