① 问题:Java 泛型擦除后如何通过反射获取泛型信息? 核心原理:Java 泛型在编译时会进行「类型擦除」,大部分泛型信息会被擦除为Object。但在以下场景中,编译器会保留部分泛型信息,可通过反射获取: 1. 继承 / 实现泛型父类 / 接口 当一个类继承了带泛型的父类(或实现带泛型的接口),编译器会在class文件中保留父类的泛型参数。 2.获取字段 / 方法的泛型信息 可以通过Field.getGenericType()和Method.getGenericParameterTypes()获取字段、方法声明时的泛型信息。 ② 用 AI 审查Cache 代码 审查结果:你的Cache实现结构清晰,封装性良好,完全符合泛型类的设计规范。 • 底层采用HashMap存储键值对,实现了put/get/remove/clear等核心缓存操作,功能完整。 • 泛型参数K和V使用正确,实现了类型安全,编译时即可检查类型错误。 • 建议:可以添加缓存过期策略、线程安全控制(如ConcurrentHashMap)或 LRU 淘汰策略,进一步提升健壮性。 思考题:为什么 Java 泛型不支持基本类型? 核心原因是Java 的「类型擦除」机制,具体分三点说明: 1. 类型擦除后会变成 Object Java 泛型在编译后会被擦除为Object类型,而基本类型(如int、char)不是对象,无法直接向上转型为Object。 比如List会被擦除为List,但int无法被擦除为Object,因此语法不支持。 2. 基本类型没有继承关系 泛型的本质是「引用类型占位符」,而基本类型是独立的,不继承任何对象类型,无法参与泛型的多态机制。 3. Java 提供了包装类替代方案 虽然不能直接用基本类型,但可以使用它们的包装类(如Integer、Character),配合自动装箱 / 拆箱机制,实现和基本类型几乎一样的使用体验。 比如List会被擦除为List,而Integer是对象,可以正常参与类型擦除。