java中的泛型类型擦除
大家好,我是雄雄,今天給大家分享的是:java的泛型是類型擦除的。
寫在前面
那么何為類型擦除?類型擦除就是在編譯期明確去掉所編程序的類型系統。啥?還不明白?以java泛型為例,java的泛型在編譯期有效,在運行期被刪除,下面我們來具體的看看。
先舉例一段代碼:
public?class?Test?{public?void?method(String [] strs){}public?void?method(int?[] ints){}public?void?listmethod(List<String> strList){}public?void?listmethod(List<Integer> intList){}}以上這段代碼很簡單,我們寫了4個方法,其中method的兩個方法的參數類型不一樣,listmethod方法的參數類型也不一樣,理論上來說,method的兩個方法和listmethod的兩個方法都可以構成方法重載,但是,這樣寫對嗎?
這樣寫編譯無法通過。報錯的地方就在listmethod方法上,報錯信息為:
這個錯誤的意思就是,listmethod<List<String>方法在編譯時擦除類型后為listmethod<List<E>與另一個方法重復(listmethod<List<Integer>),也就是說方法名一樣,注意這里的一樣是指方法名和參數都一樣,故報錯。
?
這就是java泛型擦除類型引起的問題,在編譯后所有的泛型都會做出相應的轉化,可以總結為如下轉換規則:
List<String>、List<Integer>、List<T>擦除后的類型為List。
List<String[]>擦除后的類型為List[]。
List<? extends E>、List<? superE>擦除后的類型為List<E>。
List<T extends Serializable &Cloneable>擦除后的類型為List< Serializable >
?
看完以上規則之后你是否明白了上面代碼為什么會報編譯錯誤呢?
?
辣椒醬了哈,年底沖銷量了,滿80減15了,單件商品下單立減1.88元,時間有限!
本文參考自:《編寫高質量代碼 改善java程序的151個建議》
作者:秦小波
往期精彩
投資理財要趁早,基金風險是最小!
2021-01-10
一百饅頭一百僧,大僧三個更無爭,小僧三人分一個,大小和尚得幾丁?
2021-01-09
你們好好的學,回頭教教我~
2021-01-08
辣椒醬中獎說明~
2021-01-07
點分享
點點贊
點在看
總結
以上是生活随笔為你收集整理的java中的泛型类型擦除的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: i9最低配置?
- 下一篇: #面试!,一定要注意,避免踩这些雷!!