Java 重复注解 @Repeatable

发布时间 2023-09-11 11:34:32作者: del88

1. 设计一个重复使用的注解:

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Repeatable(AppSpecs.class) //这里为当前注解的容器类.class
public @interface AppSpec {

    /**
     * 应用ID
     */
    long appId();


    /**
     * 规格ID列表
     */
    long[] specs();
}

 

2. 设计一个重复注解的容器注解

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface AppSpecs {

    AppSpec[] value(); //子注解的数组,一定是value
}

 

3. 注解的使用方法有2种:

//@AppSpec(appId = 123, specs = {1,2,3}) //1.重复使用,推荐这种,看着比较直观
//@AppSpec(appId = 456, specs = {1,2,3})
//@AppSpec(appId = 123, specs = {1,2,3})
@AppSpecs({@AppSpec(appId = 123, specs = {1,2,3}), @AppSpec(appId = 456, specs = {1,2,3})}) //2.或者这样嵌套

4.获取注解只有一种方法:

        Test.class.getAnnotation(AppSpecs.class); //只能获取嵌套注解,局限住了注解的使用方式,必须为嵌套

        Test.class.getAnnotation(AppSpec.class); //只能获取单个非嵌套注解,无意义

        Test.class.getAnnotationsByType(AppSpec.class); //两种使用方式的注解,都能获取到,推荐;

 

举例: