泛型的今生來世

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>

兩者具體差異化:https://blog.csdn.net/qq_32117641/article/details/88692100?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase

 

 

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