1.什麼是泛型?
Java 泛型是 JDK 5 中引入的一個新特性, 泛型提供了編譯時類型安全檢測機制,該機制允許程序員在編譯時檢測到非法的類型。
泛型的本質是參數化類型,也就是說所操作的數據類型被指定爲一個參數。
2.爲什麼要用泛型?
①編譯時的強類型檢查
②消除顯式的類型強制轉換
③更好的代碼複用性,從而達到功能抽象的效果
3.泛型的分類
總體分爲:泛型類、泛型接口和泛型方法
3.1 泛型類
//將要操作的數據類型指定爲參數T
public class Box<T> {
private T t;
public void add(T t) {
this.t = t;
}
public T get() {
return this.t;
}
}
3.2 泛型方法
public static <T> List<T> findRepeat(Collection<T> datas) {
if (datas instanceof Set) {
return new ArrayList<>();
}
HashSet<T> set = new HashSet<>();
List<T> repeatList = new ArrayList<>();
for (T t : datas) {
if (set.contains(t)) {
repeatList.add(t);
} else {
set.add(t);
}
}
return repeatList;
}
3.3 泛型接口
public interface IStrategy {
/**
* 根據id獲取對應的圖表數據
* @param dispatchQuery
* @return
*/
<T> T getGraphData(DispatchQuery dispatchQuery);
}
注意:如果需要運用泛型,首先需要用<T>申明是泛型 ,當然可以用其他<E>, 一般情況用<T>較爲通用。
4. 通配符泛型
通配符可以使用extends和super關鍵字來限制:
extend
上界用extends關鍵字聲明,表示參數化的類型可能是所指定的類型,或者是此類型的子類。
super
下界用super進行聲明,表示參數化的類型可能是所指定的類型,或者是此類型的父類型,直至Object。
4.1 List<? extends Apple> 表示不確定參數類型,但必須是Apple類型或者Apple子類類型,這是上邊界限定
4.2 List<? super Apple> 表示不確定參數類型,但必須是Apple類型或者Apple的父類類型,這是下邊界限定
4.3 List<?> 表示未受限的通配符,相當於 List<? extends Object>