日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

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

發(fā)布時間:2025/3/19 55 豆豆

1. 泛型的定義和意義

1.1 什么叫泛型?

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

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

1.3 為什么要使用泛型?

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

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

2.1 泛型類的定義及使用

2.2 泛型方法的定義及使用

2.3 工作原理

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

? ??

? ??

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

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

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

3.1 限定通配符

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

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;} }

總結(jié)

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

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