java注解可使用枚举类型作为属性,需为public且提供默认值;支持单值及数组形式,运行时通过反射直接获取枚举实例。

Java 注解中可以使用枚举类型作为属性,语法简单,但需注意几点限制和规范。
枚举必须是注解属性的合法类型
Java 规定注解的属性类型只能是以下几种之一:基本类型、String、Class、枚举类型、其他注解类型,以及上述类型的数组。枚举完全符合要求,可直接声明为属性:
- 枚举类需是 public 的(推荐),且定义在注解可见范围内
- 属性声明方式为:
MyEnum value() default MyEnum.DEFAULT; - 必须提供默认值(
default)或在使用时显式指定,否则编译报错
定义和使用示例
先定义一个枚举:
public enum LogLevel {
DEBUG, INFO, WARN, ERROR
}
再定义注解并使用该枚举:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Loggable {
LogLevel level() default LogLevel.INFO;
}
使用注解时可指定枚举值:
@Loggable(level = LogLevel.DEBUG)
public void doSomething() { ... }
支持枚举数组形式
如果需要多个枚举值,可声明为数组类型:
LogLevel[] levels() default {LogLevel.INFO, LogLevel.WARN};- 使用时:
@Loggable(levels = {LogLevel.DEBUG, LogLevel.ERROR}) - 数组长度不限,但所有元素必须来自同一枚举类
运行时获取枚举属性值
通过反射读取注解时,枚举值会自动解析为对应枚举实例:
Loggable anno = method.getAnnotation(Loggable.class); LogLevel level = anno.level(); // 直接得到 LogLevel.DEBUG 等实例 System.out.println(level.name()); // 输出 "DEBUG" System.out.println(level.ordinal()); // 输出序号 0
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










