Java @Repeatable

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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 转自https://blog.csdn.net/briblue/article/details/73824058#...
    扎Zn了老Fe阅读 4,714评论 0 4
  • 看到这边解释注解的博客非常好。放一下原版链接。进行了一些简化。 Annotation 中文译过来就是注解、标释的意...
    春天的蜜蜂阅读 4,776评论 0 0
  • 午加餐:各种糖瓜晚水果:橙子 参考目标: 1份豆2份肉3份“新鲜”水果4份谷物/薯5份蔬菜,深绿色叶菜最好6杯水 ...
    静趣_儿童心理师阅读 1,391评论 0 0
  • 每当我们聆听小提琴优美旋律的时候,都会被美妙的琴音所打动。那么有谁知道?小提琴制作的流程是及其的复杂与不易。 要想...
    李凤全阅读 2,828评论 0 4
  • js的面向对象 首先java script是一种轻量级的脚本语言(弱数据语言) 什么是面向对象呢? 面向对象其实就...
    妄自F阅读 4,726评论 0 1

友情链接更多精彩内容