深入JAVA泛型


背景

Java推出泛型以前,程序員可以通過構(gòu)建一個(gè)元素類型為Object的集合,改集合能夠存儲(chǔ)任意的數(shù)據(jù)類型對(duì)象,而在使用該集合的過程中,程序員明確知道存儲(chǔ)的每個(gè)元素類型,否則很容易引起ClassCastException異常

泛型學(xué)習(xí)結(jié)構(gòu)圖


一、泛型的概述

Java泛型 是JDK5中引入的一個(gè)新特性,泛型提供了編譯時(shí)類型安全監(jiān)測機(jī)制,該機(jī)制允許我們?cè)诰幾g檢測到非法的類型數(shù)據(jù)結(jié)構(gòu)。
泛型的本質(zhì)就是參數(shù)化類型,也就是所操作的數(shù)據(jù)類型被指定為一個(gè)參數(shù)。
這里解釋一下兩個(gè)詞:
1、編譯時(shí)類型安全監(jiān)測機(jī)制:
ArrayList<String> strList = new ArrayList<>()
strList.add("1");//這里不會(huì)出錯(cuò),
strList.add ( 1 ); //這里會(huì)無法添加,編譯時(shí)報(bào)錯(cuò)。
2、參數(shù)化類型:
指的就是將類型,當(dāng)做參數(shù),如ArrayList<String>,或者ArrayList<User> 這里將String類型,User類型,當(dāng)做參數(shù),傳遞給ArrayList

二、泛型類

1、泛型類的定義語法

class 類名稱 <泛型標(biāo)識(shí),泛型標(biāo)識(shí),.....>{
private 泛型標(biāo)識(shí)? 變量名
}

2、常用的泛型標(biāo)識(shí):T、E、K、V

3、注意:
泛型不支持基本數(shù)據(jù)類型,只能是類型,因?yàn)榉盒蜁?huì)先轉(zhuǎn)化成Object類,再在適當(dāng)?shù)臅r(shí)候,轉(zhuǎn)化成對(duì)應(yīng)的類型。
同一泛型類,根據(jù)不同的數(shù)據(jù)類型創(chuàng)建對(duì)象,本質(zhì)上是同一類型(泛型類類型)地址是相同位置。如:ArrayList<User> 和 ArrayList<Person> 本質(zhì)上都是ArrayList。

如果子類是泛型類,子類和父類泛型保持一致。如果子類不是泛型類,那么父類要明確泛型類型。

三、泛型方法

1、泛型方法的定義語法
權(quán)限修飾符 <T,K,H>? 返回類型? 方法名 (T t,K k, H h) {? 方法體 }

泛型方法案例

四、泛型接口

1、泛型接口的定義語法:

權(quán)限修飾符?interface?接口名稱 <T> { }

2、注意:

2.1?實(shí)現(xiàn)類不是泛型類,泛型接口要明確類型
2.2?實(shí)現(xiàn)類是泛型類,泛型接口要和實(shí)現(xiàn)類保持一致

解釋如下:


五、泛型通配符

類型通配符一般是使用?代替具體的類型實(shí)參。這里就把?當(dāng)成特別的一種類,是所有類型的父類。

1、類型通配符的上限

即類型傳入的實(shí)參,必須是指定類型的子類型。

類型通配符的上限

2、類型通配符的下限

即類型傳入的實(shí)參,必須是指定類型的父類

類型通配符的下限

兩者的區(qū)別,一個(gè)是 extends ,一個(gè)是 super

六、泛型擦除

Java語言的泛型采用的是擦除法實(shí)現(xiàn)的偽泛型,泛型信息(類型變量、參數(shù)化類型)編譯之后通通被除掉了。使用擦除法的好處就是實(shí)現(xiàn)簡單、非常容易Backport,運(yùn)行期也能夠節(jié)省一些類型所占的內(nèi)存空間。而擦除法的壞處就是,通過這種機(jī)制實(shí)現(xiàn)的泛型遠(yuǎn)不如真泛型靈活和強(qiáng)大,泛型類型只有在靜態(tài)類型檢查期間才出現(xiàn),在此之后,程序中的所有泛型類型都將被擦除,替換成它們非泛型上界。

七、泛型與數(shù)組

1、在java中是”不能創(chuàng)建一個(gè)確切的泛型類型的數(shù)組”的,但是如果使用泛型通配符是可以的,如下:


八、總結(jié)

在實(shí)際的編程過程中,自己可以使用泛型去簡化開發(fā),且能很好的保證代碼質(zhì)量

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容