【Java进阶】泛型的理解

1. 什么是泛型?

  泛型是Java为了解决多类型兼容问题而引入的一种语法类型,比如在集合中放入各种不同类型的元素,如果使用Object类对类型进行声明,存在着类型转换造成的不安全的问题,但是引入泛型之后,泛型可以表示任意类型,而且对于特定的对象,泛型表示的类相同,即已经声明具体类型的泛型类只能使用该种具体类型。

2. 泛型类及其界定

  jdk中存在着多种泛型类或者泛型接口,如List,Map,Set等都实现了泛型,自定义泛型类如下:

public class Test3<E> {
    E element;
    public ArrayList<Test3<E>> arrayList = new ArrayList<>();
}

  在类后面加<E>其中E可以为任意字母,即表明该类为泛型类,泛型类也可以继承,通过继承说明该泛型的上界,即最多“泛”到哪一级,再往下或者往上就不可以表示了。比如下面的代码:

    public static <T extends Test> T add(T a, T b) {
        return a;
    }

  就是表示这里的泛型T只能表示Number及其子类。

    public static <T> void add(Test3<? super Test> t) {
       System.out.print(" ");
    }

  这里就表示Test3类型中的元素只能放Test及其父类

3. 泛型方法

  泛型方法主要运用于对于某个方法需要传入泛型参数时的情形,如下面的方法,用来输出该泛型的具体类型.

    public static void main(String[] args) {
        getclass(new non_overlapping_intervals());
    }
    public static <T> void getclass(T t) {
        System.out.println(t.getClass().getTypeName());
    }

  只有当参数需要泛型时,才需要引入泛型方法。

  泛型方法的具体格式如下:

\[修饰符 <T,E,……> 返回值类型~方法名称~(形参列表) \{ \\ 方法体……\\ \} \]

4. 泛型擦除

  所谓泛型擦除,是指泛型的应用和检查只存在于编译阶段,在编译阶段解决了所有类型的冲突和转换问题,到了运行阶段就无需再进行检查,所以泛型到了运行阶段就被擦除了,泛型的具体类型并不会影响泛型类的类型。

posted @ 2022-03-19 22:30  Perfecto7  阅读(70)  评论(0)    收藏  举报