泛型::参数化的类型(把类型当作是参数一样传递)
定义时不指明参数的类型,使用的时候再指明参数的类型
- 提高代码的复用性
- 它提供了编译期的类型安全,确保你只能把正确类型的对象放入集合中,避免了在运行时出现ClassCastException。
类型擦除
为了向下兼容,虚拟机其实是不支持泛型,所以Java实现的是一种 伪泛型机制,也就是说Java在编译期擦除了所有的泛型信息。所有的泛型类型最终都是一种原始类型,在Java运行时根本就不存在泛型信息。
Java编译器具体是如何擦除泛型的
检查泛型类型,获取目标类型
擦除类型变量,并替换为限定类型
如果泛型类型的类型变量没有限定(),则用Object作为原始类型,如果有限定(),则用XClass作为原始类型,如果有多个限定(T extends XClass1&XClass2),则使用第一个边界XClass1作为原始类
在必要时插入类型转换以保持类型安全
生成桥方法以在扩展时保持多态性