Java @Repeatable

Repeatable使用場景:

當我們需要重復使用某個注解時,希望利用相同的注解來表現(xiàn)所有的形式時,我們可以借助@Repeatable注解。

實例

在生活中一個人往往是具有多種身份,例如我是一家公司的老板,同時我還是我妻子的丈夫,更是我父母的孩子,如果希望借助注解的方式來表達該如何呢?

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

這里@Target是聲明Persons注解的作用范圍,參數(shù)ElementType.Type代表可以給一個類型進行注解,比如類,接口,枚舉。

@Retention是注解的有效時間,RetentionPolicy.RUNTIME是指程序運行的時候。

  • 接下來我們就定義一個注解,這里用到了@Repeatable注解,來真正表達我們的身份:
@Repeatable(Persons.class)
public  @interface Person{
    String role() default "";
}

@Repeatable括號內(nèi)的就相當于用來保存該注解內(nèi)容的容器。

  • 然后,為“我”來創(chuàng)建一個實體類:
@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

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容