美文网首页
Java @Repeatable

Java @Repeatable

作者: 蜡笔没了小新_e8c0 | 来源:发表于2019-02-28 00:09 被阅读0次

    Repeatable使用场景:

    当我们需要重复使用某个注解时,希望利用相同的注解来表现所有的形式时,我们可以借助@Repeatable注解。

    实例

    在生活中一个人往往是具有多种身份,例如我是一家公司的老板,同时我还是我妻子的丈夫,更是我父母的孩子,如果希望借助注解的方式来表达该如何呢?

    • 首先定义一个Persons类来表示我所有的身份:
    @Target(ElementType.TYPE)  
    @Retention(RetentionPolicy.RUNTIME)
    public   @interface Persons {
       Person[] value();
    }
    

    这里@Target是声明Persons注解的作用范围,参数ElementType.Type代表可以给一个类型进行注解,比如类,接口,枚举。

    @Retention是注解的有效时间,RetentionPolicy.RUNTIME是指程序运行的时候。

    • 接下来我们就定义一个注解,这里用到了@Repeatable注解,来真正表达我们的身份:
    @Repeatable(Persons.class)
    public  @interface Person{
        String role() default "";
    }
    

    @Repeatable括号内的就相当于用来保存该注解内容的容器。

    • 然后,为“我”来创建一个实体类:
    @Person(role="CEO")
    @Person(role="husband")
    @Person(role="father")
    @Person(role="son")
    public   class Man {
        String name="";
    }
    
    • 最后测试一下,获取所有的身份信息并输出:
       public static void main(String[] args) {
           Annotation[] annotations = Man.class.getAnnotations();  
           System.out.println(annotations.length);
           Persons p1=(Persons) annotations[0];
           for(Person t:p1.value()){
               System.out.println(t.role());
           }
       }
    
    if(Man.class.isAnnotationPresent(Persons.class)) {
        Persons p2=Man.class.getAnnotation(Persons.class);
        for(Person t:p2.value()){
            System.out.println(t.role());
        }
     }
    

    以上两种方式都能得到如下输出结果:
    1
    CEO
    husband
    father
    son

    相关文章

      网友评论

          本文标题:Java @Repeatable

          本文链接:https://www.haomeiwen.com/subject/ypkcuqtx.html