什么是Java中的泛型擦除?
JDK1.5及1.5之前都是没有泛型的概念的,JDK1.5之后引入了泛型的概念并为了与之前的JDK版本兼容,所以引入了泛型擦除的概念。
以下两个类型是相等的,表面泛型被擦除了,都是ArrayList
以下API,只能拿到泛型的个数,不能拿到具体的泛型类型
通过放射可以往List添加不同类型的元素,因为类型其实被擦除了,变成了Object
泛型虽然被擦除了,但是具体的泛型信息还是被保存在了字节码中
所以还是有一些方式可以很方便的获取到泛型的真实类型的
另外,对于JVM,如果对每个泛型类型都生成不同的目标代码,假如现在有10个不同泛型的List,就要生成10份字节码,这样会造成不仅造成代码膨胀,而且一份字节码对应一个Class对象,占据大量的内存。