Java 基础:反射、泛型与注解
反射的获取方式与性能代价,泛型擦除与桥接方法,注解的分类与运行时处理。
本节你将能
说清反射能做什么、泛型为什么擦除、注解如何被框架读取。
核心要点
- 反射:Class.forName / getClass / 类名.class 获取 Class;可读取字段、方法、构造器并调用。
- 反射代价:破坏封装、跳过编译期检查、有性能开销(缓存 Class 元数据可缓解)。
- 泛型擦除:编译期类型检查,运行时类型信息被擦除;引出桥接方法保持多态。
- 通配符:? extends T 上界(生产者)、? super T 下界(消费者),PECS 原则。
- 注解:SOURCE/CLASS/RUNTIME 保留策略;框架靠 RUNTIME + 反射读取(如 Spring @Autowired)。
面试连招
常被追问:泛型为什么不能用于基本类型?反射为什么慢?注解是怎么生效的?
常见坑
反射大量调用未关安全检查(setAccessible)导致性能差;误用泛型数组创建。