Java中自定义注解的数组成员用String[] value()声明,调用时可写为@ApiTags({"user","auth"})或简写@ApiTags("admin")(仅value成员),运行时反射获取即得原始数组,且数组不可为null、不支持泛型。

Java中自定义注解的数组类型成员,直接用方括号声明即可,比如 String[] value();调用时既可显式写成 @MyAnnotation(value = {"a", "b"}),也可在只有一个元素或使用默认成员名 value 时简化为 @MyAnnotation("a")(此时编译器自动装箱为单元素数组)。
定义含数组成员的自定义注解
数组类型成员和其他基本类型一样,在注解接口中以方法形式声明,返回值为对应类型的数组。注意:数组元素类型只能是合法的注解成员类型(如基本类型、String、Class、枚举、其他注解,以及它们的一维数组)。
示例:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface ApiTags {
String[] value() default {}; // 允许为空数组
int[] codes() default {200}; // 默认含一个元素
Class<?>[] exceptions() default {};
}
在代码中使用数组成员传递多个值
调用时,若传多个值,必须用大括号包裹字符串字面量或表达式;若只传一个且成员名为 value,可省略成员名和大括号。
立即学习“Java免费学习笔记(深入)”;
-
@ApiTags({"user", "auth"})→ 等价于@ApiTags(value = {"user", "auth"}) -
@ApiTags(value = {"v1", "v2"}, codes = {400, 404})→ 显式指定多个数组成员 -
@ApiTags("admin")→ 自动转为value = {"admin"}(仅限value成员) -
@ApiTags(value = {})→ 显式传空数组(不能写成value = null,编译不通过)
运行时读取数组类型注解值
通过反射获取注解后,直接调用对应方法,返回的就是原始数组(不是集合),可遍历或判断长度。
Method method = targetClass.getMethod("someMethod");
ApiTags ann = method.getAnnotation(ApiTags.class);
if (ann != null) {
String[] tags = ann.value(); // 直接拿到 String[]
int[] statusCodes = ann.codes(); // 直接拿到 int[]
System.out.println(Arrays.toString(tags)); // [user, auth]
}
注意事项与常见陷阱
- 数组成员不能设为
null,否则编译报错;需用空数组{}表示无值 - 泛型数组(如
List<String>[])不被允许,注解不支持泛型类型 - 枚举数组、自定义注解数组都合法:
MyEnum[] levels()、AnotherAnn[] configs() - 若数组元素是注解类型,每个元素需完整写出注解表达式:
@MyAnn({@Sub("x"), @Sub("y")})


















