關於java泛型類的高級用法簡介

一、限制可用的泛型類型 T
class 類名稱<T extends anyClass>
默認情況下: class 類名稱<T>   相當於  class 類名稱<T extends Object>


使用泛型限制後,泛型類的類型必須實現或繼承anyClass這個接口或類,
注意:無論anyClass是接口還是類,都必須使用extends關鍵字

二、使用類型通配符 ?
主要針對已創建的泛型類的對象,限制它的類型(實現或繼承某個接口或類),同樣採用extends關鍵字,例如(其中 A 是一個泛型類):
A<? extends List> a = null ;
a = new A<ArrayList>();
a = new A<LinkedList>();

此外,還可以將該泛型實例設置爲方法的形參:
public void doSomething(A<? extends List> a) { ... }


默認情況下:A<?> a 實例對象相當於A<? extends Object> a 實例對象


需要注意:使用通配符 ? 聲明的實例對象不能對其添加修改新的信息,只能查詢(讀取)和刪除


三、泛型類可以有多種泛型,用逗號分隔,例如:MultiOverClass<T1,T2>

四、泛型類中使用泛型可以是數組,但不能用new申請泛型數組,例如:private T[] arr = new T[10] ; 報錯

五、泛型除了可以用extends向下限制,還可以用super向上限制,例如:A<? super List> a = new A<Object>(); // 這裏對象a 只接受List及其上層父類類型

六、泛型類可以被繼承,泛型接口可以被實現,但要注意:子類中的泛型如果要保留父類中的泛型就必須指明,否則子類中的所有泛型會自動變爲Object(一般都會保留)


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