泛型

70 阅读2分钟

泛型

JDK5中引入的特性,可以在编译阶段约束操作的数据类型,并进行检查。

泛型的好处:

  • 统一数据类型。
  • 把运行时期的问题提前到了编译期间,避免了强制类型转换可能出现的异常,因为在编译阶段类型就能确定下来。

泛型的细节:

  • 泛型中不能写基本数据类型。
  • 指定泛型的具体类型后,传递数据时,可以传入该类类型或者子类类型。
  • 如果不写泛型,类型默认是Object。
  • java中的泛型是伪泛型。

泛型类

在类名后面定义泛型,创建该类对象的时候,确定类型。

格式:修饰符 class 类名<类型>{}

此处的类型可以理解为变量,但是不是用来记录数据的,而是记录数据的类型,可以写成:T、E、K、V等。

泛型方法

在修饰符后面定义方法,调用该方法的时候,确定类型。

  1. 方案一:使用类名后面定义的泛型,所有方法都能用。
  2. 方案二:在方法申明上定义自己的泛型,只有本方法能用。

格式: 修饰符<类型>返回值类型 方法名(类型 变量名){}

此处的类型可以理解为变量,但是不是用来记录数据的,而是记录数据的类型,可以写成:T、E、K、V等。

泛型接口

在接口后面定义泛型,实现类确定类型,实现类延续泛型。

格式: 修饰符 interface 接口名<类型>{}

重点:如何使用一个带泛型的接口

  1. 方式一:实现类给出具体类型。
  2. 方式二:实现类延续泛型,创建对象时再确定。

此处的类型可以理解为变量,但是不是用来记录数据的,而是记录数据的类型,可以写成:T、E、K、V等。

泛型的继承和通配符

泛型不具备继承性,但是数据具备继承性。

泛型的通配符:

  • ?extends E
  • ?super E

泛型擦除

使用场景

  • 定义类、方法、接口的时候,如果类型不确定,就可以定义泛型。
  • 如果类型不确定,但是能知道是哪个继承体系中的,可以使用泛型的通配符。