AI协助记录 一:Java 泛型擦除后,如何通过反射获取泛型信息? 核心原理 Java 泛型采用类型擦除,运行时会擦除泛型信息(如 List 变成 List),但以下场景会保留泛型信息: 1.类 / 接口上声明的泛型(如 class MyList implements List) 2.方法的返回值、参数上的泛型(如 public List getNames()) 3.字段上的泛型(如 private List names;) 二:思考题:为什么 Java 泛型不支持基本类型? 核心原因有 3 个: 1.泛型擦除机制 泛型擦除后,所有泛型类型都会被擦除为 Object(或其上界类型)。而基本类型(如 int、char)不是 Object 的子类,无法直接赋值给 Object 类型变量,因此无法直接参与泛型。 2.自动装箱 / 拆箱的补充 Java 提供了基本类型的包装类(如 Integer、Character),配合自动装箱 / 拆箱,间接实现了 “泛型支持基本类型” 的效果。例如 List 本质上是 List,存入 int 时会自动装箱为 Integer,取出时自动拆箱为 int。 3.历史与设计兼容性 Java 早期没有泛型,基本类型是为了性能设计的独立体系,和对象体系不兼容。如果让泛型直接支持基本类型,需要修改 JVM 底层和语言规范,成本极高,因此采用了 “擦除 + 包装类” 的折中方案。 三:AI审查代码 1.优点 (1)泛型使用规范 PairInner、Cache 泛型定义正确 类型安全,无强制转换,无警告 (2)swap 方法设计极佳 不修改原对象,返回新对象 自动反转泛型类型 无风险、无警告、Java 标准写法 (3)Cache 类功能完整 put /get/remove /clear/containsKey 齐全 (4)代码结构清晰 内部类 + 主方法,一个文件完成作业要求 2.缺点 (1) 缺少 toString () 打印对象时不能直接 System.out.println(pair)必须手动 getKey() + getValue() (2)缺少 final 修饰(可优化) 成员变量 key、value 可以加 final,变成不可变对象,更安全。 (3) Cache 缺少 size () 方法 作业一般要求缓存大小获取方法,加上更完美。