
大家好,我是雄雄,今天分享的主題是:java中,不能初始化泛型參數和數組,原文參考自《編寫高品質代碼 改善java程式的151個建議》,作者,秦少波。
前言
前幾天,發過一篇文章,java中的泛型類型是擦除的,有需要的夥伴可以去看看,今天我們就繼續延伸一下java中的泛型,在初始化時,不能對泛型參數和數組初始化,但是泛型集合就不一樣,下面我們來具體看看。
泛型類型在編譯期是擦除的,我們在類初始化時,無法獲得泛型的具體參數,比如下面我們看看下面代碼:
很顯然,t對象和tArray是無法通過編譯的。因為編譯器在編譯時需要擷取T類型,但泛型在編譯期類型已經被擦除了,是以new T()和new T[5]都會報錯,可是為什麼new ArrayList<>()不會報錯呢?
這是因為ArrayList表面是泛型,其實已經在編譯期轉型為Object了,我們來看看ArrayList的源代碼就知道了。
注意看elementData的定義,它容納了ArrayList的所有元素,其類型是Object數組,因為Object是所有類的父類,數組又允許協變(Covariant),是以elementData數組可以容納所有的執行個體對象。元素加入時向上轉型為Object類型(E類型轉為Object),取出時向下轉型為E類型(Object轉為E類型),如此處理而已。
今天不賣辣椒醬了!!!不信你下一單試試。
往期精彩
#面試!,一定要注意,避免踩這些雷!!
2021-01-14
挺詳細的spring+springmvc+mybatis配置整合|含源代碼
2021-01-13
java中的泛型類型擦除
2021-01-12
投資理财要趁早,基金風險是最小!
2021-01-10
一百饅頭一百僧,大僧三個更無争,小僧三人分一個,大小和尚得幾丁?
2021-01-09
你們好好的學,回頭教教我~
2021-01-08
點分享
點點贊
點在看