Java核心技術 卷I 基礎知識 學習筆記(8)
阿新 • • 發佈:2018-12-07
參考:Java核心技術 卷I 基礎知識 第八章
泛型程式設計意味著編寫的程式碼可以被很多不同型別的物件所重用。
泛型使用型別引數,使得程式碼有更好的可讀性。
在Java SE7及以後的版本中,建構函式中可以省略泛型型別,省略的型別可以從變數的型別推斷得出。
型別引數的魅力在於:使得程式具有更好的可讀性和安全性。
萬用字元型別。
一個泛型類就是具有一個或多個型別變數的類。
泛型方法可以定義在普通型別也可以定義在泛型類中。
型別變數放在修飾符的後面。
型別變數的限定使用extends,如T extends Comparable,表示T應該是Comparable的子型別。
無論何時定義一個泛型型別,都自動提供了一個相應的原始型別。原始型別的名字就是刪去型別引數後的泛型型別。擦除型別變數並替換為限定型別(無限定型別的變數用Object)。
型別擦除與多型發生了衝突,要解決這個問題,需要編譯器在對應類中生成一個過橋方法。
Java泛型轉換的事實:
-
虛擬機器中沒有泛型,只有普通的類和方法。
-
所有型別引數都用它們的限定型別替換。
-
橋方法被合成來保持多型。
-
為保持型別安全性,必要時插入強制型別轉換。
使用Java泛型時需要考慮的一些限制:
-
不能用基本型別例項化型別引數,比如,不能使用double,只能使用Double
-
執行時型別查詢只適用於原始型別。
-
不能建立引數化型別的陣列
-
Varargs警告
-
不能例項化型別變數
-
不能構造泛型陣列
-
泛型類的將她上下文中的型別變數無效
-
不能丟擲或補貨泛型類的例項
-
可以消除對受查異常的檢查
-
注意擦除後的衝突
泛型的繼承:無論S與T有什麼聯絡,Pair<S>和Pair<T>沒有什麼聯絡。
萬用字元型別:
萬用字元型別中,允許引數變化。例如:Pair<? extends Employee>