泛型概念
泛型是JavaSE1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法 。
泛型的好处
是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。
类型擦除
Java编译器通过Codesharing方式为每个泛型类型创建唯一的字节码表示,并且将该泛型类型的实例都映射到这个唯一的字节码表示上。将多种泛型类形实例映射到唯一的字节码表示是通过类型擦除(typeerasue)实现的
类型擦除指的是通过类型参数合并,将泛型类型实例关联到同一份字节码上。编译器只为泛型类型生成一份字节码,并将其实例关联到这份字节码上。类型擦除的关键在于从泛型类型中清除类型参数的相关信息,并且在必要的时候添加类型检查和类型转换的方法
类型擦除可以简单的理解为将泛型java代码转换为普通java代码,只不过编译器更直接点,将泛型java代码直接转换成普通java字节码,类型擦除的主要过程如下:
将所有的泛型参数用其最左边界(最顶级的父类型)类型替换 ,移除所有的类型参数
数组协变
A 是 B 的子类,一个 A 对象也是一种 B 对象,所以一个 A 数组也是一种 B 的数组。这称作数组的协变.泛型不支持协变.