java泛型詳解

java泛型詳解

ID:42770162

大?。?1.33 KB

頁數(shù):11頁

時間:2019-09-21

java泛型詳解_第1頁
java泛型詳解_第2頁
java泛型詳解_第3頁
java泛型詳解_第4頁
java泛型詳解_第5頁
資源描述:

《java泛型詳解》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。

1、java泛型詳解泛型(Generictype或者generics)是對Java語言的類型系統(tǒng)的一種擴展,以支持創(chuàng)建可以按類型進行參數(shù)化的類??梢园杨愋蛥?shù)看作是使用參數(shù)化類型時指定的類型的一個占位符,就像方法的形式參數(shù)是運行時傳遞的值的占位符一樣。可以在集合框架(Collectionframework)中看到泛型的動機。例如,Map類允許您向一個Map添加任意類的對象,即使最常見的情況是在給定映射(map)中保存某個特定類型(比如String)的對象。因為Map.get()被定義為返回Object,所以一般必須將Map.get()的結(jié)果強制類型轉(zhuǎn)換為期望的類型,如下面的

2、代碼所示:Mapm=newHashMap();m.put("key","blarg");Strings=(String)m.get("key");要讓程序通過編譯,必須將get()的結(jié)果強制類型轉(zhuǎn)換為String,并且希望結(jié)果真的是一個String。但是有可能某人已經(jīng)在該映射中保存了不是String的東西,這樣的話,上面的代碼將會拋出ClassCastException。理想情況下,您可能會得出這樣一個觀點,即m是一個Map,它將String鍵映射到String值。這可以讓您消除代碼中的強制類型轉(zhuǎn)換,同時獲得一個附加的類型檢查層,該檢查層可以防止有人將錯誤類型的鍵或值保

3、存在集合中。這就是泛型所做的工作。泛型的好處Java語言中引入泛型是一個較大的功能增強。不僅語言、類型系統(tǒng)和編譯器有了較大的變化,以支持泛型,而且類庫也進行了大翻修,所以許多重要的類,比如集合框架,都已經(jīng)成為泛型化的了。這帶來了很多好處:·類型安全。泛型的主要目標(biāo)是提高Java程序的類型安全。通過知道使用泛型定義的變量的類型限制,編譯器可以在一個高得多的程度上驗證類型假設(shè)。沒有泛型,這些假設(shè)就只存在于程序員的頭腦中(或者如果幸運的話,還存在于代碼注釋中)。Java程序中的一種流行技術(shù)是定義這樣的集合,即它的元素或鍵是公共類型的,比如“String列表”或者“String

4、到String的映射”。通過在變量聲明中捕獲這一附加的類型信息,泛型允許編譯器實施這些附加的類型約束。類型錯誤現(xiàn)在就可以在編譯時被捕獲了,而不是在運行時當(dāng)作ClassCastException展示出來。將類型檢查從運行時挪到編譯時有助于您更容易找到錯誤,并可提高程序的可靠性?!は龔娭祁愋娃D(zhuǎn)換。泛型的一個附帶好處是,消除源代碼中的許多強制類型轉(zhuǎn)換。這使得代碼更加可讀,并且減少了出錯機會。盡管減少強制類型轉(zhuǎn)換可以降低使用泛型類的代碼的羅嗦程度,但是聲明泛型變量會帶來相應(yīng)的羅嗦。比較下面兩個代碼例子。該代碼不使用泛型:Listli=newArrayList();li.put

5、(newInteger(3));Integeri=(Integer)li.get(0);該代碼使用泛型:Listli=newArrayList();li.put(newInteger(3));Integeri=li.get(0);在簡單的程序中使用一次泛型變量不會降低羅嗦程度。但是對于多次使用泛型變量的大型程序來說,則可以累積起來降低羅嗦程度?!撛诘男阅苁找妗7盒蜑檩^大的優(yōu)化帶來可能。在泛型的初始實現(xiàn)中,編譯器將強制類型轉(zhuǎn)換(沒有泛型的話,程序員會指定這些強制類型轉(zhuǎn)換)插入生成的字節(jié)碼中。但是更多類型信息可用于編譯器這一事實,為未來

6、版本的JVM的優(yōu)化帶來可能。由于泛型的實現(xiàn)方式,支持泛型(幾乎)不需要JVM或類文件更改。所有工作都在編譯器中完成,編譯器生成類似于沒有泛型(和強制類型轉(zhuǎn)換)時所寫的代碼,只是更能確保類型安全而已。泛型用法的例子泛型的許多最佳例子都來自集合框架,因為泛型讓您在保存在集合中的元素上指定類型約束。考慮這個使用Map類的例子,其中涉及一定程度的優(yōu)化,即Map.get()返回的結(jié)果將確實是一個String:Mapm=newHashMap();m.put("key","blarg");Strings=(String)m.get("key");如果有人已經(jīng)在映射中放置了不是Stri

7、ng的其他東西,上面的代碼將會拋出ClassCastException。泛型允許您表達這樣的類型約束,即m是一個將String鍵映射到String值的Map。這可以消除代碼中的強制類型轉(zhuǎn)換,同時獲得一個附加的類型檢查層,這個檢查層可以防止有人將錯誤類型的鍵或值保存在集合中。下面的代碼示例展示了JDK5.0中集合框架中的Map接口的定義的一部分:publicinterfaceMap{publicvoidput(Kkey,Vvalue);publicVget(Kkey);}注意該接口的兩個附加物:*類型參數(shù)K和V在類級別的規(guī)格說明,

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細閱讀文檔內(nèi)容,確認文檔內(nèi)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。