Java之泛型在使用過(guò)程全解析
什么是泛型?
早期Java是使用Object來(lái)代表任意類型的,但是向下轉(zhuǎn)型有強(qiáng)轉(zhuǎn)的問(wèn)題,這樣程序并不安全。針對(duì)List、Set、Map等集合類型,它們對(duì)存儲(chǔ)的元素類型是沒(méi)有任何限制的。
假如向List中存儲(chǔ)Dog類型的對(duì)象,但是有人把Cat對(duì)象也存儲(chǔ)到這個(gè)List中了,那么在編譯上是沒(méi)有任何語(yǔ)法錯(cuò)誤的。所有使用該泛型參數(shù)的地方都被統(tǒng)一化,保證類型一致。
如果未指定具體類型,默認(rèn)是Object類型。集合體系中的所有類都增加了泛型,泛型也主要用在集合。
下面我們就針對(duì)泛型類、泛型方法、泛型類派生出的子類、類型通配符、泛型擦除、橋接方法等內(nèi)容進(jìn)行一一介紹。
泛型類
泛型類就是把泛型定義在類上,用戶使用該類的時(shí)候,才把類型明確下來(lái)。
這樣的話,用戶明確了什么類型,該類就代表著什么類型,用戶在使用的時(shí)候就不用擔(dān)心強(qiáng)轉(zhuǎn)的問(wèn)題,和運(yùn)行時(shí)轉(zhuǎn)換異常的問(wèn)題了,如下所示:

泛型方法
除了在類上使用泛型,我們可能僅僅在某個(gè)方法上需要使用泛型,外界僅僅是關(guān)心該方法,不關(guān)心類其他的屬性,這樣的話,我們?cè)谡麄€(gè)類上定義泛型,未免就有些大題小作了。那么此時(shí),我們可以采用泛型方法。

泛型類派生出的子類
前面我們已經(jīng)定義了泛型類,泛型類是擁有泛型這個(gè)特性的類,它本質(zhì)上還是一個(gè)Java類,那么它就可以被繼承或?qū)崿F(xiàn)。這里分兩種情況:
- ①子類明確泛型類的類型參數(shù)變量

- ②子類不明確泛型類的類型參數(shù)變量

我們創(chuàng)建一個(gè)Inter接口,在該接口上使用泛型,代碼如下所示:

類型通配符
List<?>表示元素類型未知的List,它可以匹配任何類型的元素。
聲明List<?>后,不能向集合中添加元素,因?yàn)闊o(wú)法確定集合的元素類型,唯一例外的是null。

泛型的上限和下限
泛型的上限:
格式:類型名稱<?extends 類>對(duì)象名稱
意義: 只能接收該類型及其子類
泛型的下限:
格式:類型名稱<?super類>對(duì)象名稱
意義:只能接收該類型及其父類型

類型擦除
泛型是提供給javac編譯器使用的,它可以作為類型的限制,讓編譯器在源代碼級(jí)別上,擋住非法類型的數(shù)據(jù)。
但是在JDK1.5之前沒(méi)有泛型的概念,為了能夠與之前版本代碼兼容,編譯器編譯完帶有泛型的java程序后,生成的class字節(jié)碼文件中將不再帶有泛型信息,這個(gè)過(guò)程稱為“擦除”。

橋接方法的作用是什么?
橋接方法是jdk1.5引入泛型后,為使java泛型方法生成的字節(jié)碼與jdk1.5版本之前的字節(jié)碼兼容由編譯器自動(dòng)生成的。可用 method.isBridge() 判斷method是否是橋接方法。

總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java并發(fā)編程中的synchronized關(guān)鍵字詳細(xì)解讀
這篇文章主要介紹了Java并發(fā)編程中的synchronized關(guān)鍵字詳細(xì)解讀,在Java早期版本中,synchronized 屬于 重量級(jí)鎖,效率低下,這是因?yàn)楸O(jiān)視器鎖(monitor)是依賴于底層的操作系統(tǒng)的Mutex Lock來(lái)實(shí)現(xiàn)的,Java 的線程是映射到操作系統(tǒng)的原生線程之上的,需要的朋友可以參考下2023-12-12
BootStrap Jstree 樹(shù)形菜單的增刪改查的實(shí)現(xiàn)源碼
這篇文章主要介紹了BootStrap Jstree 樹(shù)形菜單的增刪改查的實(shí)現(xiàn)源碼,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-02-02
mybatisPlus實(shí)現(xiàn)倒序拼接字符串
這篇文章主要介紹了mybatisPlus實(shí)現(xiàn)倒序拼接字符串方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01
Java后端返回PDF預(yù)覽給前端的實(shí)現(xiàn)
前端要預(yù)覽服務(wù)器PDF 可直接將要blob流返回給前端,即可用瀏覽器自帶pdf預(yù)覽功能打開(kāi),本文就來(lái)介紹一下如何實(shí)現(xiàn),感興趣的可以了解一下2023-09-09
關(guān)于idea中SpringBoot啟動(dòng)失敗的坑
這篇文章主要介紹了關(guān)于idea中SpringBoot啟動(dòng)失敗的坑,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03
利用微信小程序+JAVA實(shí)現(xiàn)微信支付的全過(guò)程
微信支付是一種在線支付解決方案,允許用戶通過(guò)微信內(nèi)的支付功能進(jìn)行付款,下面這篇文章主要給大家介紹了關(guān)于利用微信小程序+JAVA實(shí)現(xiàn)微信支付的相關(guān)資料,需要的朋友可以參考下2024-08-08
配置化Feign接口動(dòng)態(tài)切換URL方式
本文介紹了在開(kāi)發(fā)、測(cè)試和生產(chǎn)環(huán)境中使用Feign接口時(shí),根據(jù)不同的環(huán)境動(dòng)態(tài)切換調(diào)用URL的方法,通過(guò)在不同環(huán)境的配置文件中配置URL,并實(shí)現(xiàn)一個(gè)Feign攔截器來(lái)讀取這些配置,從而實(shí)現(xiàn)URL的動(dòng)態(tài)切換,這種方法避免了引入過(guò)多步驟,同時(shí)也保證了不同環(huán)境下的URL正確調(diào)用2024-11-11

