Java 类型擦除与泛型信息恢复
摘要
Java的泛型在运行时会进行类型擦除,这意味着在JVM中无法知道泛型的具体类型。因此无法直接使用泛型创建对象和数组,也无法对泛型进行实例判断。不过,Java编译器仍会保留泛型信息,以便解决数据对象的反序列化问题。在涉及泛型赋值处,Java编译器会插入checkcast
指令,保证类型安全。如果指令失败(返回类型与目标类型不匹配),JVM会抛出ClassCastException
异常。这是为了保证泛型体系与非泛型体系的兼容性。例如,将泛型的List赋值给裸类型的List,可能会导致类型转换异常。