日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

什么是泛型,为什么要使用泛型? 泛型类和泛型方法的实现以及限定通配符的使用。什么是泛型擦除,为什么有泛型擦除,泛型擦除到底是怎么实现的

發(fā)布時間:2025/3/19 编程问答 38 豆豆

1. 泛型的定義和意義

1.1 什么叫泛型?

泛型,顧名思義就是廣泛的類型,專業(yè)術語為“參數(shù)化類型”;當我們創(chuàng)建對象時沒指定類型,任何引用類型都可以使用,兼容多種數(shù)據(jù)類型。如果是基本類型,會自動裝箱轉為對應的包裝類,如下圖。

1.2 但是指定類型后,只能使用特定類型,如下圖。

1.3 為什么要使用泛型?

因為對于一些工具類來說,編寫時是不知道使用者到時用在哪些類上,所以為了能夠自適應類型,就得使用泛型這種機制。

2. 泛型的使用和工作原理

2.1 泛型類的定義及使用

2.2 泛型方法的定義及使用

2.3 工作原理

事實上,泛型只在編譯階段有作用,編譯器檢驗泛型信息之后,如果沒有限定類型,那么泛型的相應使用處會替換為Object類型。如果限定了類型,那么在使用時會先進行類型檢查,然后會進行類型擦除源代碼和字節(jié)碼文件反編譯分析如下圖。

? ??

? ??

通過上面的代碼分析,我們實現(xiàn)了泛型擦除并且知道泛型擦除是什么。泛型擦除就是在擦除前,如果指定了類型,那么使用時會進行類型檢查,然后在編譯后進行泛型擦除,字節(jié)碼中已經(jīng)不存在泛型,泛型相應使用處都使用Object替代。

那么類型擦除的作用是什么呢? 是為了確保和沒有泛型特性的JDK5版本的類庫兼容。

3. 限定通配符和非限定通配符?

3.1 限定通配符

限定通配符有兩種:一種是<? extends T>,通過這種確保泛型是T的子類,可以是T本身,也可以是子類的子類,這樣的話,T的多個實現(xiàn)類都可以作為泛型對象;另一種是<? super T>,通過確保類型必須是T的父類來設定類型的下界。

3.2 非限定通配符

非限定通配符即<?>,可以是任何類型,但是它不可以定義類和泛型方法,一般用作參數(shù),如下圖。

附錄:代碼

public class GenericTest {public static void main(String[] args) {GenericClass<String> genericClass = new GenericClass<String>();String s = "abc";genericClass.test(s);testGe(s);}public static <T> T testGe(T t){if(t instanceof String){System.out.println("String: " + t);}else if(t instanceof Integer){System.out.println("Integer: " + ((Integer)t + 1));}return t;} }class GenericClass<T> {T test(T t){System.out.println("泛型類測試");return t;} }

總結

以上是生活随笔為你收集整理的什么是泛型,为什么要使用泛型? 泛型类和泛型方法的实现以及限定通配符的使用。什么是泛型擦除,为什么有泛型擦除,泛型擦除到底是怎么实现的的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。