泛型就是在編碼時爲爲所操作的對象指定具體的數據類型,例如ArrayList<String>表明ArrayList中元素類型都爲String,它同樣可以應用在類、接口和方法上,分別稱爲泛型類、泛型接口和泛型方法。
想想在不使用泛型的情況下,更多的是使用強制類型轉換來實現數據元素的類型轉換,但是這種類型轉換在編譯器編譯期間是無法校驗是否能轉換成功的,因爲只有編碼人員和代碼運行時的JVM才知道這個數據元素原來到底是什麼類型,緊靠編碼人員去保障轉換的正確與否是不可靠的,一不小心就會拋出ClassCastException,所以在JDK1.5中新增了泛型特性,這樣就可以在編碼的時候依靠編譯器來校驗類型是否匹配,它是一種正確編碼的輔助。
Java語言中的泛型被稱爲僞泛型,因爲這種泛型它只在編寫的源碼中存在,在經過編譯器編譯後的字節碼文件中不會包含泛型中的類型信息了,泛型信息在編譯的時候被擦除了,並且會在相應的地方插入強制類型轉換的代碼,這個過程就是泛型擦除。例如new ArrayList<String>(),泛型擦除後就是new ArrayList(),對其元素的操作也會加上(String)強制類型轉換。
推薦閱讀:
【每天一道面試題】ReentrantLock相對於synchronized的優勢有哪些?
【每天一道面試題】ReentrantLock是如何實現公平鎖及可重入的?
【每天一道面試題】如何理解Java中的happens-before?
【每天一道面試題】說一下ThreadLocal原理及會不會發生內存泄漏
【每天一道面試題】Redis單例模式、主從模式、sentinel模式和集羣模式優缺點?
如有收穫,請點擊底部右下角"在看",謝謝!