泛型
JDK5中引入的特性,可以在编译阶段约束操作的数据类型,并进行检查。
泛型的好处:
- 统一数据类型。
- 把运行时期的问题提前到了编译期间,避免了强制类型转换可能出现的异常,因为在编译阶段类型就能确定下来。
泛型的细节:
- 泛型中不能写基本数据类型。
- 指定泛型的具体类型后,传递数据时,可以传入该类类型或者子类类型。
- 如果不写泛型,类型默认是Object。
- java中的泛型是伪泛型。
泛型类
在类名后面定义泛型,创建该类对象的时候,确定类型。
格式:修饰符 class 类名<类型>{}
此处的类型可以理解为变量,但是不是用来记录数据的,而是记录数据的类型,可以写成:T、E、K、V等。
泛型方法
在修饰符后面定义方法,调用该方法的时候,确定类型。
- 方案一:使用类名后面定义的泛型,所有方法都能用。
- 方案二:在方法申明上定义自己的泛型,只有本方法能用。
格式: 修饰符<类型>返回值类型 方法名(类型 变量名){}
此处的类型可以理解为变量,但是不是用来记录数据的,而是记录数据的类型,可以写成:T、E、K、V等。
泛型接口
在接口后面定义泛型,实现类确定类型,实现类延续泛型。
格式: 修饰符 interface 接口名<类型>{}
重点:如何使用一个带泛型的接口
- 方式一:实现类给出具体类型。
- 方式二:实现类延续泛型,创建对象时再确定。
此处的类型可以理解为变量,但是不是用来记录数据的,而是记录数据的类型,可以写成:T、E、K、V等。
泛型的继承和通配符
泛型不具备继承性,但是数据具备继承性。
泛型的通配符:
- ?
- ?extends E
- ?super E
泛型擦除
使用场景
- 定义类、方法、接口的时候,如果类型不确定,就可以定义泛型。
- 如果类型不确定,但是能知道是哪个继承体系中的,可以使用泛型的通配符。