JavaSE—泛型
一,目录
- 泛型的概述
- 泛型的应用
- 泛型高级
二,泛型的概述
为什么会有泛型呢?(集合中的安全问题…).
早期的Object类型可以接收任意对象类型,但是在实际的使用中,会有类型转换问题.也就存在安全隐患,所以java提供泛型来解决这个问题.意思就是泛型就是为了解决类型转换的安全问题而来的.
三,泛型的应用
- 泛型类
- 泛型方法
- 泛型接口
泛型类
- 把泛型定义在类上
- 格式:public class 类名<泛型类型1…>
- 注意:泛型类型必须是引用类型
集合中的泛型就是泛型类的应用:
定义泛型类:
泛型类的使用:
泛型方法
- 把泛型定义在方法上
- 格式:public <泛型类型> 返回类型 方法名(泛型类型 参数)
不使用泛型方法的情况:
使用泛型方法的情况1(类似ArrayList的add方法):
泛型方法上的泛型参数和类上的泛型参数一致.
泛型方法的泛型参数和泛型类的泛型没有关系:
静态方法中:
** **静态方法不能访问类的泛型,所以只能使用泛型方法
泛型接口
- 把泛型定义在接口上
- 格式:public interface 接口名<泛型类型1…>
定义泛型接口:
接口只能被实现,所以实现的时候有两种情况:
- 第一种情况:实现类实现该接口的时候就已经知道是什么类型了
- 第二张情况:实现类实现该接口的时候还不知道是什么类型
第一种情况(基本不用):
第二种情况(常用):最终回归到泛型类
四,泛型高级(通配符)
- 泛型通配符<?>
- 任意类型,如果没有明确,那么就是Object以及任意的Java类
- ? extends E
- 向下限定,E及其子类
- ? super E
- 向上限定,E及其父类
任意类型
准备三个类:
测试:
泛型如果明确写的时候,前后必须一致
? 表示任意类型都是可以的
向下限定
? extends E : E及其子类
向上限定
? super E : E 及其父类