什么是java泛型
泛型,即“參數(shù)化類型”。一提到參數(shù),最熟悉的就是定義方法時(shí)有形參,然后調(diào)用此方法時(shí)傳遞實(shí)參。那么參數(shù)化類型怎么理解呢?顧名思義,就是將類型由原來的具體的類型參數(shù)化,類似于方法中的變量參數(shù),此時(shí)類型也定義成參數(shù)形式(可以稱之為類型形參),然后在使用/調(diào)用時(shí)傳入具體的類型(類型實(shí)參)。
泛型的本質(zhì)是為了參數(shù)化類型(在不創(chuàng)建新的類型的情況下,通過泛型指定的不同類型來控制形參具體限制的類型)。也就是說在泛型使用過程中,操作的數(shù)據(jù)類型被指定為一個(gè)參數(shù),這種參數(shù)類型可以用在類、接口和方法中,分別被稱為泛型類、泛型接口、泛型方法。(推薦教程:java教程)
泛型的作用:
編譯器檢查我們放入容器的元素是否滿足泛型容器定義的期許,我們只需要告訴編譯器我這個(gè)容器是一個(gè)處理何種類型的容器即可。編譯器為從容器中取出的元素進(jìn)行自動(dòng)轉(zhuǎn)型。
在泛型介入后,程序員的關(guān)注點(diǎn)由2點(diǎn)變?yōu)?點(diǎn):
定義容器處理的類型,這樣放入容器的檢查和取出容器的轉(zhuǎn)型都交由編譯器來完成。
優(yōu)點(diǎn):
1、類型安全
泛型的主要目標(biāo)是提高Java程序的類型安全。通過知道使用泛型定義的變量的類型限制,編譯器可以在非常高的層次上驗(yàn)證類型假設(shè)。沒有泛型,這些假設(shè)就只存在于系統(tǒng)開發(fā)人員的頭腦中。
通過在變量聲明中捕獲這一附加的類型信息,泛型允許編譯器實(shí)施這些附加的類型約束。類型錯(cuò)誤現(xiàn)在就可以在編譯時(shí)被捕獲了,而不是在運(yùn)行時(shí)當(dāng)作ClassCastException展示出來。將類型檢查從運(yùn)行時(shí)挪到編譯時(shí)有助于Java開發(fā)人員更早、更容易地找到錯(cuò)誤,并可提高程序的可靠性。
2、消除強(qiáng)制類型轉(zhuǎn)換
泛型的一個(gè)附帶好處是,消除源代碼中的許多強(qiáng)制類型轉(zhuǎn)換。這使得代碼更加可讀,并且減少了出錯(cuò)機(jī)會(huì)。盡管減少強(qiáng)制類型轉(zhuǎn)換可以提高使用泛型類的代碼的累贊程度,但是聲明泛型變量時(shí)卻會(huì)帶來相應(yīng)的累贊程度。在簡單的程序中使用一次泛型變量不會(huì)降低代碼累贊程度。但是對于多次使用泛型變量的大型程序來說,則可以累積起來降低累贊程度。所以泛型消除了強(qiáng)制類型轉(zhuǎn)換之后,會(huì)使得代碼加清晰和筒潔。
3、更高的運(yùn)行效率
在非泛型編程中,將筒單類型作為Object傳遞時(shí)會(huì)引起B(yǎng)oxing(裝箱)和Unboxing(拆箱)操作,這兩個(gè)過程都是具有很大開銷的。引入泛型后,就不必進(jìn)行Boxing和Unboxing操作了,所以運(yùn)行效率相對較高,特別在對集合操作非常頻繁的系統(tǒng)中,這個(gè)特點(diǎn)帶來的性能提升更加明顯。
4、潛在的性能收益
泛型為較大的優(yōu)化帶來可能。在泛型的初始實(shí)現(xiàn)中,編譯器將強(qiáng)制類型轉(zhuǎn)換(沒有泛型的話,Java系統(tǒng)開發(fā)人員會(huì)指定這些強(qiáng)制類型轉(zhuǎn)換)插入生成的字節(jié)碼中。但是