




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、09.泛型本章要點在集合中使用泛型定義泛型接口、泛型類類型通配符類型通配符的上限方法簽名中定義類型形參類型通配符的下限擦除與轉換泛型與數組泛型初衷Java集合不會知道我們需要用它來保存什么類型的對象,所以他們把集合設計成能保存任何類型的對象,只要就具有很好的通用性。但這樣做也帶來兩個問題:集合對元素類型沒有任何限制,這樣可能引發一些問題:例如想創建一個只能保存Dog對象的集合,但程序也可以輕易地將Cat對象“丟”進去,所以可能引發異常。由于把對象“丟進”集合時,集合丟失了對象的狀態信息,集合只知道它盛裝的是Object,因此取出集合元素后通常還需要進行強制類型轉換。這種強制類型轉換既會增加編程
2、的復雜度、也可能引發ClassCastException。在集合中使用泛型在集合中使用泛型后帶來如下優勢:程序再也不能“不小心”把其他對象“丟進”strList集合中;程序更加簡潔,集合自動記住所有集合元素的數據類型,從而無需對集合元素進行強制類型轉換。泛型 所謂泛型:就是允許在定義類、接口指定類型形參,這個類型形參在將在聲明變量、創建對象時確定(即傳入實際的類型參數,也可稱為類型實參)。JDK1.5改寫了集合框架中的全部接口和類,為這些接口、類增加了泛型支持,從而可以在聲明集合變量、創建集合對象時傳入類型實參,這就是前面程序看到List和ArrayList兩種類型。從泛型類派生子類 當創建了
3、帶泛型聲明的接口、父類之后,可以為該接口創建實現類,或從該父類來派生子類,但值得指出的是,當使用這些接口、父類時不能再包含類型形參。如果使用泛型類時沒有傳入實際的類型參數,Java編譯器可能發出警告:使用了未經檢查或不安全的操作這就是泛型檢查的警告, 并不存在泛型類 雖然可以把ArrayList類當成ArrayList的子類,事實上ArrayList類也確實是一種特殊的ArrayList類,這個ArrayList對象只能添加String對象作為集合元素。但實際上,系統并沒有為ArrayList生成新的class文件,而且也不會把ArrayList當成新類來處理。實際上,泛型對其所有可能的類型參
4、數,都具有同樣的行為,從而可以把相同的類被當成許多不同的類來處理。與此完全一致的是,類的靜態變量和方法也在所有的實例間共享,所以在靜態方法、靜態初始化、或者靜態變量的聲明和初始化中不允許使用類型形參。 系統中并不會真正生成泛型類,所以instanceof運算符后不能使用泛型類。類型通配符 List對象不能被當成List對象使用,也就是說:List類并不是List類的子類。數組和泛型有所不同:假設Foo是Bar的一個子類型(子類或者子接口),那么Foo依然是Bar的自類型;但G不是G的子類型。 為了表示各種泛型List的父類,我們需要使用類型通配符,類型通配符是一個問號(?),將一個問號作為類型
5、實參傳給List集合,寫作:List(意思是未知類型元素的List)。這個問號(?)被稱為通配符,它的元素類型可以匹配任何類型。 設定類型通配符的上限 使用List這種形式是,即表明這個List集合可以是任何泛型List的父類。但還有一種特殊的情形,我們不想這個List是任何泛型List的父類,只想表示它是某一類泛型List的父類。 們需要一種泛型表示方法,它可以表示所有Shape泛型List的父類,為了滿足這種需求,Java泛型提供了被限制的泛型通配符。被限制的泛型通配符的如下表示:List 設定類型形參的上限 Java泛型不僅允許在使用通配符形參時設定類型上限,也可以在定義類型形參時設定上
6、限,用于表示創給該類型形參的實際類型必須是該上限類型,或是該上限類型的子類。 例如 Apple泛型方法 如果定義類、接口是沒有使用類型形參,但定義方法時想自己定義類型形參,這也是可以的,JDK1.5還提供了泛型方法的支持。 泛型方法的語法格式為:修飾符 返回值類型 方法名(形參列表)/方法體.泛型方法的方法簽名比普通方法的方法簽名多了類型形參聲明,類型形參聲明以尖括號括起來,多個類型形參之間以逗號(,)隔開,所有類型形參聲明放在方法修飾符和方法返回值類型之間。 使用泛型方法與類、接口中使用泛型參數不同的是,方法中的泛型參數無需顯式傳入實際類型參數,因為編譯器根據實參推斷類型形參的值。它通常推斷
7、出最直接的類型參數。 泛型方法和類型通配符大時候都可以使用泛型方法來代替類型通配符。泛型方法允許類型形參被用來表示方法的一個或多個參數之間的類型依賴關系,或者方法返回值與參數之間的類型依賴關系。如果沒有這樣的類型依賴關系,不應該使用泛型方法。設定通配符的下限 Java集合框架中的TreeSet有一個構造器也用到了這種設定通配符下限的語法,如下所示:TreeSet(Comparator c)擦除和轉換 在嚴格的泛型代碼里,帶泛型聲明的類總應該帶著類型參數。但為了與老的Java代碼保持一致,也允許在使用帶泛型聲明的類時不指定類型參數。如果沒有為這個泛型類指定類型參數,則該類型參數被稱作一個raw type(原始類型),默認是該聲明該參數時指定的第一個上限類型。 當把一
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年體育場館運營社會穩定性評估與風險防范報告
- 2025年商業地產數字化運營與客戶體驗提升解決方案匯編報告
- 藥品研發階段管理制度
- 藥品銷售藥店管理制度
- 藥店投訴舉報管理制度
- 薪酬福利保密管理制度
- 設備制作日常管理制度
- 設備工具安全管理制度
- 設備材料存放管理制度
- 設備網絡維護管理制度
- MOOC 創新管理-浙江大學 中國大學慕課答案
- 梨的貯藏特性及保鮮技術
- 2024年人參相關項目實施方案
- 2024年安徽淮河能源控股集團有限責任公司招聘筆試參考題庫含答案解析
- 混合痔術后護理查房
- 建筑材料采購投標方案(技術標)
- 挪用資金案諒解書
- 機械連接預應力混凝土異型樁L19ZG403
- 港口碼頭考核管理制度
- 飛機儀電與飛控系統原理智慧樹知到課后章節答案2023年下中國人民解放軍海軍航空大學
- 中醫刮痧課件
評論
0/150
提交評論