泛型的今生来世

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

 

 

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