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());
}
}
以上兩種方式都能得到如下輸出結(jié)果:
1
CEO
husband
father
son