JAVA基礎--泛型
JAVA基礎--泛型
一、作用
- 泛化、參數化類型。所操作的數據類型被指定為一個參數;
- 類型安全。編譯時驗證類型,如果編譯時正常,運行時就不會出現
ClassCastException(類型轉換異常) 異常; - 消除強制類型轉換。泛型可以消除源代碼中的許多強制類型轉換,這樣可以使代碼更加可讀,并減少出錯的機會。
二、泛型的聲明
格式:<T>
標識符一般使用單個大寫字母,常用 T ,含有Type的意思;
包含多個參數類型時,可以用逗號隔開;例如:<K,V>
三、泛型類
定義:
class 類名 <T,R...>{
}
- 類中的普通成員、方法可以使用類的泛型;
- 靜態成員、方法無法使用類的泛型。因為類加載時,對象還未初始化,無法確定泛型的具體類型;
- 泛型類的類型在對象初始化時確定;
- 對象初始化時未指定類型,默認類型為Object;
例:
public class GenericsTest<T> {
private T member;
// 該方法為普通方法,這里的 T 為返回值類型,具體的數據類型在對象創建的時候定義
public T getValue(List<T> a){
return a.get(0);
}
}
四、泛型接口
定義:
interface 接口名 <T,R......>{
}
- 泛型接口類的泛型類型,在繼承接口或實現接口時確定
- 其他特性與泛型類相同
interface GenericsTest<T> {
T value;
// 該方法為普通方法,這里的 T 為返回值類型,具體的數據類型在對象創建的時候定義
T getValue();
}
// 繼承
interface StingTest extends GenericsTest<String>{
}
// 實現
class StringClass implements GenericsTest<String>{
private String value;
@Override
public String getValue(){
return this.value;
}
}
五、泛型方法
修飾符<T,R...> 返回類型 方法名(參數列表) {
}
- 普通類或泛型類中都可以定義泛型方法;
- 當泛型方法調用時類型會被確定;
- 注意區分普通方法和泛型方法的區別,泛型訪問有泛型聲明
<T>
public class GenericsTest<T> {
// 該方法為普通方法,這里的 T 為返回值類型,具體的數據類型在對象創建的時候定義
public T getValue(List<T> a){
return a.get(0);
}
// 靜態屬性和靜態方法不能直接使用類的泛型作為參數類型,類加載時對象還沒定義,無法確定T代表的具體數據類型
// public static T getValue1(List<T> a){
// return a.get(0);
// }
// 該方法聲明了<T> , 是泛型方法,即使是靜態方法也可以使用
public static <T> T getValue2(T a){
return a;
}
// 方法中使用 非類聲明的泛型類型 時,需要另外聲明。 如方法:getValue4
// public E getValue3(List<E> a){
// return a.get(0);
// }
// 聲明了 方法 返回的泛型<E>
public static <E> E getValue4(List<E> a){
return a.get(0);
}
}
六、類型通配符 "?"
-
<?>:支持任意泛型類型 -
<? extends A>:支持A類以及A類的子類,規定了泛型的上限 -
<? super A>:支持A類以及A類的父類,不限于直接父類,規定了泛型的下限

浙公網安備 33010602011771號