1. 程式人生 > 實用技巧 >HashMap原始碼解讀(JDK1.7版)

HashMap原始碼解讀(JDK1.7版)

泛型
Jdk1.5出現的安全機制。解決型別安全問題,只能用於編譯時期,提高安全性
1、好處:
將執行時期的問題classCastExceptoin轉到了編譯時期。
避免了強制轉換的麻煩。
2、什麼時候用?
當操作的引用資料型別不確定的時候,就使用泛型,將要操作的引用資料型別傳入即可,其實<>就是一個用於接收具體引用資料型別的引數範圍;
在程式中,只要用到了帶有<>的類或者介面,就要明確傳入的引用資料型別;
泛型技術是給編譯器使用的技術,用於編譯時期,確保了型別的安全。執行時,會將泛型去掉。生成的class問題中是不帶泛型的,這個叫泛型的擦除。為什麼擦除呢?因為這樣可以相容執行的類載入器。


泛型的補償:在下執行時,通過獲取元素的型別進行轉換動作,不用使用者在強制轉換了。
泛型類:什麼時候用?當類中的操作的引用資料型別不確定時候,就可以使用泛型類來表示。
當方法靜態時,不能訪問類上定義的泛型,如果靜態方法使用泛型,只能將泛型定義在方法上。寫在返回值的前面。
泛型介面:將泛型定義在介面上。
泛型的萬用字元:?未知型別

泛型的限定:?extends E--------->接收E型別或者E的子型別。
?extends E:接收E型別或者E的子類物件,上限:

一般在儲存元素的時候都是用上限,因為這樣取出都是按照上限型別來運算的,不會出現型別安全隱患。
?super E:接收E型別或者E的父類物件,下限:

什麼時候用下限呢?通常對集合中的元素進行取出操作時。可以用下限。
泛型的一個簡單舉例:

 1 public class Mapthem<T>{ 
 2     private T data;
 3     public T getData() {
 4 
 5         return data;
 6     }
 7     public void setData(T data) {
 8         this.data = data;
 9     }
10 }