Java自定义注解通过@interface声明,属性为无参方法,返回类型限于基本类型、String、Class、枚举、其他注解及其一维数组;default指定默认值;数组用[]声明,默认值为{}。

Java 中为自定义注解配置属性、默认值和数组类型参数,核心是使用 @interface 定义注解,并在其中声明方法(即注解成员)。这些方法不能有参数、不能有 throws 子句、不能是泛型,返回类型仅限于基本类型、String、Class、枚举、其他注解,以及上述类型的**一维数组**。
定义带属性和默认值的注解
注解中的每个方法代表一个可配置的属性。用 default 关键字指定默认值,调用方不显式赋值时即采用该值。
示例:
public @interface ApiOperation {
String value() default ""; // 字符串,默认空字符串
String description() default ""; // 字符串,默认空字符串
int order() default 0; // 基本类型,默认 0
boolean deprecated() default false; // boolean,默认 false
}
使用时可省略有默认值的属性:
立即学习“Java免费学习笔记(深入)”;
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
@ApiOperation(value = "用户登录", order = 1)
public void login() { ... }
等价于:
@ApiOperation(value = "用户登录", description = "", order = 0, deprecated = false)
public void login() { ... }
声明数组类型参数
注解支持一维数组作为属性类型,语法是返回类型后加 []。数组元素类型必须符合注解成员类型限制。
常见数组类型示例:
-
String[] tags() default {};—— 字符串数组,默认为空数组 -
Class>[] exceptions() default {};—— Class 数组 -
MyEnum[] levels() default {MyEnum.INFO};—— 枚举数组,默认含一个元素 -
AnotherAnnotation[] examples() default {};—— 其他注解数组
使用方式:
@ApiOperation(
value = "获取用户",
tags = {"user", "query"},
exceptions = {IllegalArgumentException.class, UserNotFoundException.class}
)
public User getUser(int id) { ... }
注意事项与限制
注解属性不支持以下内容:
- 不能使用
void、包装类(如Integer)以外的基本类型包装类需谨慎——实际允许,但必须保证运行时能被反射正确解析;推荐优先用基本类型或String - 不能是任意对象或集合(如
List、Map),只能是一维数组 - 数组默认值必须写成
default {}(空大括号),不能写default null或default new String[0] - 若某属性无默认值,则使用注解时必须显式提供该属性值
完整实用示例
public @interface ValidatedField {
String name() default ""; // 字段名
String message() default "字段校验失败"; // 错误提示
int minLength() default 0; // 最小长度
String[] groups() default {}; // 分组标识(常用于 JSR-303 风格)
Class<? extends Throwable>[] exceptions() default {IllegalArgumentException.class};
}
// 使用
@ValidatedField(
name = "username",
minLength = 3,
groups = {"create", "update"},
exceptions = {CustomValidationException.class}
)
private String username;

















