java泛型類型擦除

概念

類型擦除指的是在源碼中的類型信息在編譯成字節碼的過程中被去除。字節碼中的容器
類存儲的對象都是java.lang.Object類型的對象。

爲什麼java要進行類型擦除?

由於jvm運行字節碼時不支持類型檢查,因此java泛型只是語法層面的語法糖。

無論在java源碼中寫的什麼類型參數,編譯器生成的字節碼文件中的泛型代碼都是
java.lang.Object類型。

導致的問題

在java源碼中向一個泛型容器添加類型不一致的對象時,編譯器在編譯時會檢查

出類型錯誤。但是在執行字節碼時,容器的類型信息被擦除,List和
List其實是一樣的。如果在運行時用類型轉換的方式將String類型的對象轉
爲Object對象然後放入List,就會導致類型錯誤,拋出ClassCastException。

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