JDK1.8之后添加了一个新的元注解——@Repeatable
,对于它的用法,我在网上逛了一圈,很失望,没能解答我的疑惑。
这里先引入来自于博客Java注解——Repeatable对于@Repeatable 的用法:
首先创建一个APersons
注解,再创建一个APerson
注解,最后编写一个Man
类来作为测试:
- 创建一个
APersons
注解,里面包含一个Aperson
类型的数组
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface APersons {
APerson[] value();
}
- 创建
APerson
注解,并且添加了@Repeatable
元注解
@Repeatable(APersons.class)
public @interface APerson {
String role() default "";
}
- 创建
Man
类,这里我们就可以多次使用APerson
注解了
@APerson(role = "CEO")
@APerson(role = "husband")
@APerson(role = "father")
@APerson(role = "son")
public class Man {
String name = "";
}
- 我们在Man中编写一下main方法,利用反射获取Man类的注解
public static void main(String[] args) {
Annotation[] annotations = Man.class.getAnnotations();
System.out.println(annotations.length);
APersons p1 = (APersons) annotations[0];
for(APerson t : p1.value()){
System.out.println(t.role());
}
}
结果输出为:
1
CEO
husband
father
son
根据输出的结果,我们能够知道,虽然在Man
类上添加了许多APerson
注解,但这些注解都被当成是一个数组,装载这个数组的容器,其实就是APersons
我们在看一遍APerson
注解
@Repeatable(APersons.class)
public @interface APerson {
String role() default "";
}
这里,就是将APersons
作为了APerson
的容器,这里不太好理解,换个角度就是,APersons
内创建了一个APerson[]
数组,它能够将重复出现的APerson
注解当成数组中的某一元素看待。