参考:(99+ 封私信 / 80 条消息) Java泛型中的类型擦除详解 - 知乎
Java的泛型是伪泛型,这是因为Java在编译期间,所有的泛型信息都会被擦掉。
Java的泛型基本上都是在编译器这个层次上实现的,在生成的字节码中是不包含泛型中的类型信息的,使用泛型的时候加上类型参数,在编译器编译的时候会去掉,这个过程称为类型擦除(泛型擦除)。
如在代码中定义List<Object>和List<String>等类型,在编译后都会变成List,JVM在运行期间能够看到的只是List,而由泛型附加的类型信息对JVM是看不到的。Java编译器会在编译时尽可能的发现可能出错的地方,但是仍然无法在运行时刻出现的类型转换异常的情况。