協變數組和類型擦除

1、數組的協變性:

數組的協變性指的是:如果類Base是類Sub的基類,那麼Base[]就是Sub[]的基類。

而泛型是不可變的,List<Integer>不是List<Object>的基類,更不會是它的子類。

2、數組的具體化:

數組是具體化的,而泛型在運行時是被擦除的。

數組是在運行時纔去判斷數組元素的類型約束。

而泛型正好相反,在運行時,泛型的類型信息是會被擦除的,只有編譯的時候纔會對類型進行強化。
java泛型是編譯器泛型,是一種語法糖,生成的二進制代碼是沒有泛型,jvm感受不到泛型。java的泛型編譯生成二進制代碼的時候,進行了類型的擦除,放入集合,放入集合的實際上是object類型,從集合中獲取對象的時候,獲取的是object類型,然後進行了強制類型轉換,轉換成實際的類型。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章