枚举策略与注解处理:Enum 深化、EnumSet/EnumMap 内部、APT 与工程约束
大约 2 分钟
枚举策略与注解处理:Enum 深化、EnumSet/EnumMap 内部、APT 与工程约束
新手先看 · 一屏速览
- 枚举可拥有字段/方法/抽象方法以承载策略;配合 EnumSet/EnumMap 高效表示集合/映射
- 注解有保留策略(SOURCE/CLASS/RUNTIME)与目标;运行期读取需 RUNTIME
- 注解处理器(APT)在编译期生成代码或校验约束
1. Enum 的扩展能力
enum Op {
ADD{ int calc(int a,int b){ return a+b; } },
SUB{ int calc(int a,int b){ return a-b; } };
abstract int calc(int a,int b);
}- 以常量实现不同策略;保持类型安全
- EnumSet/EnumMap:基于位图或数组实现,高效轻量 补充:
- Enum 常量是单例;序列化保证同一性(readResolve)
- Enum 可实现接口(如
IntUnaryOperator),提升复用与可测试性
2. 注解模型
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
public @interface Audited { String value() default ""; }- Retention 决定注解存活阶段;Target 决定可标注位置 扩展:
- 重复注解(Repeatable)通过容器注解实现
- 元注解(如
@Documented、@Inherited)影响文档与继承行为
3. 运行期读取与 APT
最近建一些几十个工作内推群,各大城市都有,群里目前已经收集了很多内推岗位,大厂、中厂、小厂、外包都有。 欢迎HR、开发、测试、运维和产品加入。

扫描下方微信,备注:网站+所在城市,即可拉你进工作内推群。

Audited a = clazz.getAnnotation(Audited.class);- APT:实现
AbstractProcessor,在编译期生成代码/校验约束(如 Dagger、MapStruct) 要点: - 指定
getSupportedAnnotationTypes和getSupportedSourceVersion;支持增量编译与 KAPT - 失败快:发现约束违背时抛出编译错误,避免问题进入运行时
4. 实战清单与反模式
- 清单:Enum 承载稳定策略;EnumSet/EnumMap 管理枚举集合;注解保留与目标清晰
- 反模式:枚举膨胀;滥用运行期注解扫描;注解驱动缺乏约束/文档
5. 练习
- 使用枚举实现简单的计算器,验证策略切换
- 编写一个注解 + 运行期读取示例,打印方法审计信息
