一 为什么要用泛型
泛型主要有两个好处:
编译时类型安全;
代码复用
二 泛型使用
泛型参数,泛型接口:被实现或继承后可以继续使用泛型 或给出类型
泛型方法:方法语句中声明<T> 才是泛型方法
Ps 传值泛型对象时,泛型对象的指定类的子类也可以使用
泛型限定符:extends
指定泛型 必须继承或实现该类或接口,
可以有多个限定 &连接 只能有一个类,且放在第一位(单继承 多实现)
三 泛型的约束和局限性
无法实例化类型变量 无法使用 T t = new T();
静态域无法引用泛型变量(泛型方法可以使静态)原因 java 静态对象加载顺序
不允许使用 instanceof 关键字
泛型类数组可以定义,无法创建
extends 限制符 可以继承 Exception Throwable 但无法被捕获,但可以被抛出
无法捕获 可以抛出四 继承规则
泛型类型 不影响泛型类的 类型,
泛型类型继承关系,无法影响泛型类的继承关系
通配符:
extends 上界通配符,这个类或接口的本身或子类,限定传入参数类型的上界,用于安全的读取数据;原理:上界类型是确认的,可传子类 获取数据时 可强转为父类;
super 下界通配符,这个类或接口的父类或父类的父类,限定传入参数类型的下界,用于安全的写入数据;原理:下界类型确定 只能传父类,可以安全的转型
五 虚拟机实现泛型的原理
类型擦除:
在进入JVM之前,会把泛型去掉,JVM中的泛型类 只是自身Class,泛型类会被替换为固定Class;
无限制泛型-------> Object
有限制泛型-------> 上界或下界
Ps :利用发射获取方法时,要注意泛型方法的类型被擦除成什么了
网友评论