【Java进阶】泛型的理解


  1. 什么是泛型?
    泛型是Java为了解决多类型兼容问题而引入的一种语法类型,比如在集合中放入各种不同类型的元素,如果使用Object类对类型进行声明,存在着类型转换造成的不安全的问题,但是引入泛型之后,泛型可以表示任意类型,而且对于特定的对象,泛型表示的类相同,即已经声明具体类型的泛型类只能使用该种具体类型。
  2. 泛型类及其界定
    jdk中存在着多种泛型类或者泛型接口,如List,Map,Set等都实现了泛型,自定义泛型类如下:
public class Test3 {
    E element;
    public ArrayList> arrayList = new ArrayList<>();
}

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

    public static  T add(T a, T b) {
        return a;
    }

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

    public static  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  void getclass(T t) {
        System.out.println(t.getClass().getTypeName());
    }

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

泛型方法的具体格式如下:
修饰符 返回值类型 方法名称(形参列表){
方法体……
}

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