泛型


 泛型

  • 泛型是一种未知的,不确定的数据类型。

  • 泛型也可以省略,如果省略泛型相当于泛型是Object

  • 泛型之间是没有继承关系的。 比如:ArrayList 不是 ArrayList的父类

  • 如果在定义类的时候,类名后面写上,就表示在类的范围内定义了一个泛型类型T(不确定的数据类型T)

  • 这种未知的类型T等到我们使用这个类的时候就会被确定出来。

  • 这个T可以使用其他字母代替。

  • 泛型好处:

    1. 省略了向下转型的代码。

    2. 将运行时期的问题提前到了编译时期。

    泛型擦除

    Java中的泛型都是伪泛型,泛型只在源代码阶段有效,一旦编译,泛型就会消失。

    泛型方法

    泛型方法的定义格式: 修饰符 <泛型> 返回值类型 方法名(参数列表) { 方法体; return 返回值; } 在方法上定义的泛型,需要等到调用方法的时候才能确定。

     

    public class Factory<T> {
    /*
       定义方法,接收什么类型的参数,就得到什么类型的结果
    */
    public <E> E getSame(E e) {
       return e;
    }
    }

    泛型通配符

    如果想要接受任何类型类型的泛型,可以使用泛型通配符 ?表示泛型通配符,可以匹配任何类型的泛型。

    泛型通配符要放在方法参数位置被动匹配, 不要主动使用。

    泛型限定

    如果限制泛型通配符的取值范围,那么可以使用泛型限定。

    格式:
       <? extends A>:泛型要么是A类,要么是A类的子类。 上限。
       <? super A>泛型要么是A类,要么是A类的父类。 下限。