泛型是JDK1.5新增的特性,它的本质是参数化类型的应用,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口、方法的创建中。
Java语言中的泛型,只在程序源码中存在,在编译后的字节码文件中,就已经被替换为原来的原生类型(Raw Type,也称裸类型)了,并且在响应的地方插入了强制转型代码。所以Java语言中的泛型技术实际是语法糖,其泛型实现方法称为类型擦除,基于这种方法实现的泛型称为伪泛型。
由于java泛型的引入,虚拟机规范中引入了Signature属性,用于存储一个方法在字节码层面的特征签名,这个属性中保存的参数类型并不是原生类型,而是包括了参数化类型的信息。因此类型擦除只是对方法的Code属性中的字节码进行擦除,实际上元数据中还保留了泛型信息,所以可以通过反射手段去的参数化类型。