




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第Java詳細分析講解泛型目錄1.泛型概念2.泛型的使用2.1泛型類語法2.2泛型方法語法2.3泛型接口語法2.4泛型在main方法中的使用3.擦除機制4.泛型的上界5.通配符5.1通配符的上界5.2通配符的下界6.包裝類6.1裝箱和拆箱
1.泛型概念
泛型就是將類型參數化
所謂類型參數化就是將類型定義成參數的形式,然后在使用此類型的時候的時候再傳入具體的類型
到這我們可以看出來:泛型在定義的時候是不知道具體類型的,需要在使用的時候傳入具體的類型,泛型可以用在類、接口和方法中,這樣做的好處是一個泛型可以適用多種情況
2.泛型的使用
2.1泛型類語法
publicclass類名T{......}
T表示這是一個泛型類,T是type的首字母大寫,除此之外的名稱還有:
E:element
K:key
V:vlaue
N:number
中可以有多個類型參數,中間使用逗號隔開
2.2泛型方法語法
public泛型類型返回值方法名(泛型類型參數){......}
2.3泛型接口語法
publicinterface接口名泛型類型{......}
2.4泛型在main方法中的使用
下面寫一個泛型類來引出后面的內容
classFcT{
privateTa;
publicTget(Tdata){
this.a=data;
returna;
}
前面說過泛型是在使用的時候再傳入具體的類型,所以在實例化上面泛型類的時候要指定類型。具體方式如下
類名具體類型變量名=new類名具體類型
注意:
等號右邊中可以不寫具體類型,編譯器可以根據上下文推導出此處的類型中只能寫入類,所以如果是基本數據類型,就需要寫入其對應的包裝類,包裝類除int是Integer,char包裝類是Character外,其余均是首字母大寫Java中不能創建泛型數組,至于原因要從Java中泛型的機制說起
3.擦除機制
Java實現泛型是依靠這個擦除機制的,這個機制目前來講過于復雜,只說結果
Java編譯器在編譯的時候會去掉類型參數,而對于泛型類型來說,如果指定上界會用上界類型進行替換,沒有指定上界則會以Object來進行替換
所以在編譯的時候泛型類型都被替換成了Object,編譯后的class文件是不包含任何泛型信息的,即泛型信息不會進入到運行時階段
但Java的數組需要進行運行期類型檢查,而由于類型擦除,造成數組運行期類型檢查不能正常進行,破壞了Java數組運行期類型檢查的機制
4.泛型的上界
所謂泛型的上界就是對傳入的類型變量進行約束,指定哪些類型可以傳入,哪些不行,語法如下:
class類名類型參數extends類型邊界{......}
還是以上面的泛型類為例,現在改成如下情況:
classFcEextendsNumber{
privateEa;
publicEget(Edata){
this.a=data;
returna;
}
那么此時Fc就只能傳入Number或者其子類
5.通配符
通配符就是在泛型中使用,它是用來解決泛型無法協變的問題,那什么是協變?
假設有兩個類A和B,A繼承B,那么泛型FcA應該也是FcB的子類,但泛型不支持這樣的父子關系
基于上面的情況,所以需要使用通配符
直接寫兩個類,A繼承B
classB{
}
classAextendsB{
}
現在把B改成
5.1通配符的上界
通配符也可以指定界限,語法和泛型的上界類似
extends類型邊界
假設extendsNumber,那么可以傳入的是Number及其子類
但需要注意的是:通配符的上界只能用來讀取數據,不能用來寫入數據
因為我們只知道里面可以傳入什么類型的數據,但具體是什么類型我們不知道,所以也就無法對數據進行修改,但是讀取則可以直接用父類對象來進行接收讀取出來的數據
5.2通配符的下界
下界使用的是super
super類型邊界
superInteger表示可以傳入Integer或者其父類
通配符下界可以進行寫入數據,但不能用來讀取數據
原因也很簡單,里面可以傳的類都是Integer或者它的父類,寫進去的數據可以進行轉化,但讀取數據用哪一個父類對象接收則不好確定了
6.包裝類
由于Java中基本數據類型不是繼承Object類,所以為了泛型能夠支持基本數據類型,每一個基本數據類型都有各自的包裝類
基本數據類型包裝類byteByteshortShortintIntegerlongLongfloatFloatdoubleDoublecharCharacterbooleanBoolean
6.1裝箱和拆箱
裝箱就是把基本數據類型改為對應的包裝類類型,拆箱就是和裝箱相反的操作
Java中提供了自動裝箱和拆箱機制,但還是先來看下手動裝箱和拆箱的操作
//手動裝箱
inti=10;
Integerj=Integer.valueOf(i);//第一種操作
Integerj=newInteger(i);//第二種操作
//手動拆箱
inta=Value();
自動裝箱和拆箱的話代碼就要少的多
inti=10;
Integerj=i;//自動裝箱
inta=j;//自動拆箱
關于int的包裝類有一個比較有趣的地方,裝箱使用了valueOf方法,其源碼如下:
可以看到傳給方法的參數首先是和IntegerCache進行比較,如果參數的值是在某個范圍中,那么返回的是數組里面的元素,否則返回新的對象
那我
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 安全工程試題及答案
- 城市快速路建設項目2025年社會穩定風險評估與城市規劃與社區互動研究報告
- 工業互聯網平臺入侵檢測系統2025年數據安全防護方案報告
- 《庫存管理》課件
- 冬季換季教育培訓課件
- 中國發展動態課件
- 數碼影像培訓課件
- 周末安全教學課件
- 員工職業規劃課件
- 團委培訓分享交流
- 2024年石家莊市市屬國有企業招聘考試真題
- 醫院火災的應急預案及處理流程
- 2025年山東省煙臺市中考真題數學試題【含答案解析】
- 種豬養殖場建設項目初步設計方案
- 中位數與箱線圖-第2課時箱線圖復習鞏固課件北師大版(2025)數學八年級上冊
- 2025河南省豫地科技集團社會招聘169人筆試參考題庫附帶答案詳解
- 2025年山東將軍煙草新材料科技有限公司招聘筆試沖刺題(帶答案解析)
- 人教版(2024)七年級下冊英語期末模擬測試卷(含答案)
- 2024年貴州貴州貴安發展集團有限公司招聘筆試真題
- 2025年中考語文押題作文范文10篇
- T/CADCC 003-2024汽車漆面保護膜施工技術規程
評論
0/150
提交評論