【每天一道面試題】泛型是什麼?類型擦除又是怎麼回事?

泛型就是在編碼時爲爲所操作的對象指定具體的數據類型,例如ArrayList<String>表明ArrayList中元素類型都爲String,它同樣可以應用在類、接口和方法上,分別稱爲泛型類、泛型接口和泛型方法。

想想在不使用泛型的情況下,更多的是使用強制類型轉換來實現數據元素的類型轉換,但是這種類型轉換在編譯器編譯期間是無法校驗是否能轉換成功的,因爲只有編碼人員和代碼運行時的JVM才知道這個數據元素原來到底是什麼類型,緊靠編碼人員去保障轉換的正確與否是不可靠的,一不小心就會拋出ClassCastException,所以在JDK1.5中新增了泛型特性,這樣就可以在編碼的時候依靠編譯器來校驗類型是否匹配,它是一種正確編碼的輔助。

Java語言中的泛型被稱爲僞泛型,因爲這種泛型它只在編寫的源碼中存在,在經過編譯器編譯後的字節碼文件中不會包含泛型中的類型信息了,泛型信息在編譯的時候被擦除了,並且會在相應的地方插入強制類型轉換的代碼,這個過程就是泛型擦除。例如new ArrayList<String>(),泛型擦除後就是new ArrayList(),對其元素的操作也會加上(String)強制類型轉換。

推薦閱讀:

【每天一道面試題】觸發Full GC的場景有哪些?

【每天一道面試題】ReentrantLock相對於synchronized的優勢有哪些?

每天一道面試題】ReentrantLock是如何實現公平鎖及可重入的?

每天一道面試題】如何理解Java中的happens-before?

【每天一道面試題】說一下ThreadLocal原理及會不會發生內存泄漏

【每天一道面試題】Redis單例模式、主從模式、sentinel模式和集羣模式優缺點?

【每天一道面試題】輸入流和輸出流關閉時異常處理有什麼區別?

【每天一道面試題】JVM內存分配規則有哪些?

如有收穫,請點擊底部右下角"在看",謝謝!

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