一、引
最近发现一个问题,LinkedList<String> ls 不可以被赋值给LinkedList<Object> lo,这是为什么呢?
这是因为Java中是泛型是伪泛型。虽然上面两个泛型的类具有继承关系,但是这两个List之间本身是没有关系的。当上述的
LinkdedList被编译之后,class文件中其变成了LinkedList list,存在泛型擦除的过程。这样来看,上面两个LinkedList其实是可以包
含任何对象的。这个时候如果在泛型为Object的List里插入一个Integer,是没有任何问题的,但是通过引用的赋值方式,所以在
String泛型的List中也有了一个Integer对象,这是非常不合理的,也违背了泛型的意义。
二、泛型擦除
上面提到了泛型擦除这个概念,那么下面就从这点展开,分析一下:
import java.util.*;
public class ErasedTypeEquivalence {
public static void main(String[] args) {
Class c1 = new ArrayList<String>().getClass();
Class c2 = new ArrayList<Integer>().getClass();