這篇文章主要介紹了Java泛型的示例分析,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
泛型的由來
為什么需要泛型
Java的數(shù)據(jù)類型一般都是在定義時就需要確定,這種強制的好處就是類型安全,不會出現(xiàn)像弄一個ClassCastException的數(shù)據(jù)給jvm,數(shù)據(jù)安全那么執(zhí)行的class就會很穩(wěn)定。但是假如說我不知道這個參數(shù)要傳什么類型的,因為公司需求在變,如果寫死的那就只能便以此需求就改一次,很麻煩。sun公司也注意到這個問題,這樣會讓代碼的靈活性降低,他們就研究出了泛型。
泛型初識
什么是泛型,可以字面理解就是一個泛泛的類型,他是不確定的,在Java代碼編譯的時候用泛型是不會出錯的,而在運行期時就會報錯,說你這種第一是不合理的。這是為什么呢。因為為了提高靈活性,就在編譯時期將條件放寬,但是泛型一定要在運行的時候告訴jvm你給我的數(shù)據(jù)到底是什么類型的,否則jvm會是懵逼的。所以泛型的好處就是將類型的靈活性提高,也只是在Java語法的基礎(chǔ)上提高,不過泛型還是比較實用的。
何時使用泛型
泛型的應(yīng)用場景就是應(yīng)用在模型(可以理解為存儲數(shù)據(jù)的盒子),我為了這個盒子適用更多的地方我就用將需要存入的數(shù)據(jù)用一個泛型表示,當(dāng)然可以傳入多值。如果是相同類型的對象就用一個泛型的數(shù)組比較好,學(xué)過集合的小伙伴應(yīng)該都知道,沒學(xué)過的那你應(yīng)該補補課了。
泛型的語法
public class A<T extends B>{ T t; }
泛型的缺點或者為什么需要上、下邊界
泛型的雖然強大,但是世界上任何東西東部是完美的。它也有缺陷。比如說我有一個盒子我想裝蘋果,但是我還可能想裝香蕉那怎么辦。那還不好說,在給一個參數(shù)不就行了,那十個呢,二十個呢。em....的確是。如果說我們想裝的東西都屬于一個類并且只要是這個類的子類就可以裝。這個想法sun為我們想好了。那就是用上邊界通配符。語法是 T是泛型,M是T的父類。我們就定義一個水果類(Fruit),盛裝就容器就是盤子(Dish),現(xiàn)在我們就可以裝任何水果了,不錯吧!
上邊界Java代碼
public class Dish<T extends Fruit>{ private T fruitChild; public Dish(T fruitChild){ this.fruitChild = fruitChild; } public T getFruitChild(){ return fruitChild; } public void setFruitChild(T f){ this.fruitChild = f; } public static void main(String[] args){ Dish dish = new Dish<apple>(); Apple apple = new apple(); //apple must be Fruit child; dish.setFruitChild(apple); system.out.printf(dish.getFruitChild); } }
下邊界Java代碼
public class Dish<T super Apple>{ private T appleFather; public Dish(T appleFather){ this.appleFather = appleFather; } public T getAppleFather(){ return appleFather; } public void setAppleFather(T f){ this.appleFather = f; } public static void main(String[] args){ Dish dish = new Dish<Fruit>(); Fruit fruit = new Fruit(); //fruit must be apple son; dish.setAppleFather(fruit); system.out.printf(dish.getAppleFather); } }
什么是上邊界通配符
當(dāng)泛型T給定形如 的A類型到A類型任何子類的限制域,可以匹配任何在此限制域中的類型,此種表示叫上邊界通配符。
上邊界通配符理解
什么是下邊界通配符
當(dāng)泛型T給定形如 的A類型到A類型任何父類的限制域,可以匹配任何在此限制域中的類型,此種表示叫下邊界通配符。
下邊界通配符理解#
上下邊界通配符的缺點
上界<? extends T>不能往里存,只能往外取。
解釋
因為編譯器只知道傳入的是T的子類,但具體是哪一個編譯器不知道,他只標(biāo)注了一個占位符,當(dāng)?傳過來時,他不知道這能不能和占位符匹配,所以set不了。
下界<? super T>不影響往里存,但往外取只能放在Object對象里。
解釋
因為下邊界已經(jīng)限制了?的粒度,他只可能是T本身或者是T的父類。我們想想,我想要一個T,你卻返回給我一個比T小的Object,這樣我們就因為精度損失而拿不到想要的數(shù)據(jù)了。
感謝你能夠認真閱讀完這篇文章,希望小編分享的“Java泛型的示例分析”這篇文章對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯(lián)建站,關(guān)注創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)建站chinadenli.net,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
網(wǎng)頁名稱:Java泛型的示例分析-創(chuàng)新互聯(lián)
分享路徑:http://chinadenli.net/article14/ejhde.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、外貿(mào)網(wǎng)站建設(shè)、微信小程序、標(biāo)簽優(yōu)化、ChatGPT、網(wǎng)站導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容