【重學Java】(一)Java泛型

1.什麼是泛型

JDK5引入泛型,提供了編譯時 類型安全 檢測機制。該機制允許程序員在編譯期檢測非法的類型。

本質是參數類型,所操作的數據類型被認定爲參數。

只存在於編輯器和編譯期,jvm中沒有泛型,目的是爲了兼容低版本

2.爲什麼使用泛型

(1)增強編譯期錯誤檢測,減少因類型問題引發的運行時異常

(2)具有更強的類型檢查,不需要強轉

(3)可以使用泛型算法,增加代碼複用性

3.Java中的泛型

泛型類、泛型接口、泛型方法

4.常見類型變量名稱

E:元素(在Java集合框架中有廣泛的應用)

K:鍵

N:數字

T:類型 V:值

S,U,V 等:第二,第三,第四個類型

5.受限的類型參數

單一限制:<U extends Number>

多種限制:<U extends A & B & C>

extends表達的意義:這裏指的是廣義上“擴展”,兼有“類繼承”和“接口實現”之意 多種限制下的格式

語法要求:如果上限類型是一個類,必須第一位標出,否則編譯錯誤

泛型算法實現的關鍵:利用受限類型參數

類型推斷:根據多個受限參數的交集來推斷,取範圍最小的,沒有交集則用object

6.通配符

泛型中的?爲通配符,分爲上限通配符?extends Number:只能讀不能寫

和下限通配符 ? super Integer:只能寫不能讀

即PECS producer extends consumer super,可以類比生產者和消費者,一個只生產,一個只消費

如果只是?就是不受限通配符,這時,不能調用任何和T相關的方法

通過通配符可以在泛型類和接口直接建立聯繫,提升了API的靈活性

7.泛型的約束和侷限性(類型擦除)

(1)繼承泛型類型多態的問題,子類沒有覆蓋父類的方法(jvm中用橋方法實現)

(2)泛型類型中的方法衝突(如定義 equles(T t)與object類衝突)

(3)沒有泛型數組

泛型代碼與JVM

(1)虛擬機中沒有泛型,只有普通類和代碼

(2)編譯階段,所有泛型類的類型參數,都會被object或者限定邊界來代替

(3)繼承泛型類型時,橋方法是爲了避免類型擦除導致的多態問題

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章