泛型知识点
2021-07-15 16:47:49 20 举报
AI智能生成
泛型知识点总结
作者其他创作
大纲/内容
基础概念
为了向下兼容在编译时使用了类型擦除机制
提供编译时类型安全监测机制
JDK5引入的新特性
使用泛型的好处
增强编译时错误监测,减少因类型问题引发的运行异常
避免编码中频繁的类型转换
使用泛型编写算法方法,提高复用性
分类
泛型类
定义格式:
class name<T1,T2....,Tn>
class name<T1,T2....,Tn>
泛型接口
与泛型类似
泛型方法
定义格式:
[public] [static] <T> 返回值类型 方法名(T 参数列表)
[public] [static] <T> 返回值类型 方法名(T 参数列表)
常见的参数类型
K键
V值
N数字
T类型
E元素
S,U,V,泛型声明的多个类型
泛型的实现
继续声明泛型类型
指明实际类型参数
钻石运算符Diamond
JDK1.7以前
Box<Integer> box = new Box<Integer>();
JDK1.7以后
Box<Integer> box = new Box<>();
泛型中的类型名词
原始类型
缺少实际类型变量的泛型就是一个原始类型
Box是Box<T>的原始类型
泛型类型
Person<T>整个就是一个泛型类型
类型参数
Person<T>中的T就是类型参数
参数化类型
Person<Man>整个成为参数化类型
实际类型参数
Person<Man> 中的Man被称为实际类型参数
受限类型参数
受限类型参数
单一限制
<U extends Number>
多种限制
<U extends A&B&C>
多种限制时,多重限制中只能有一个为类,可以有多个接口
其中第一个限制应为类
类型推断
java编译器可以根据每个方法调用和响应声明以确定使得调用适合的类型参数
通配符
受限通配符
List<? extends Number>
List<? super ArrayList>
extends限定上限
extends限定下限
不受限通配符
List<?>
不适用extends和super
PECS原则
如果你只需要从集合中获取类型T,使用<? extend T> 通配符
如果你只需要将类型T放到集合中,使用<? super T>通配符
如果你既要获取元素又要防止元素,则不使用任何通配符,例如:List<String>
桥接方法
编译时父类类型擦除后变成Object,导致子类不匹配,编译时会在字节码中生成桥接方法
类型擦除
作用
保证泛型不在JVM运行时出现
为了兼容JDK1.5之前版本
场景
编译器会将泛型类型中的中的所有类型参数替换为其上(下)限,如果没有做限,则替换为Object
编译出的字节码仅仅包含了常规类,接口和方法
Bridge Methods桥方法
当编译继承或实现参数化类、接口的类,编译器会在 编译期间创建一个合成方法,名为桥方法,他是类型擦除的一部分
避免了类型擦除后,调用父类方法时由于类型不匹配导致的错误
0 条评论
下一页