一 笔记
元注解 @Repeatable
- java8之后出现的,属于java8的新特性;表示该注解可以在某个元素上重复出现;
- 注解在java8之前是不能在某个元素上重复出现的;
二 自定义注解容器Persons
自定义注解容器Persons,用于定义可重复的注解;
所有的注解默认继承Annotation;
@Retention(RetentionPolicy.RUNTIME)//需和重复的注解保持一致;
public @interface AnnotationTest08_Persons {
// 提供一个数组,并且这个数组的元素类型必须是Person,即重复出现的注解名数组;
// 属性名必须是value,不能修改为其他属性名
AnnotationTest08_Person[] value();
}
三 自定义的注解AnnotationTest08_Person ,即可重复使用的注解
自定义的注解AnnotationTest08_Person ,可重复使用的注解;
- 元注解 @Repeatable 要求参数是一个继承注解的class;
*Class<? extends Annotation> value();
@Repeatable(AnnotationTest08_Persons.class)
@Retention(RetentionPolicy.RUNTIME) //注解保持到class文件,并且可以被反射机制解析;默认值为RetentionPolicy.CLASS
public @interface AnnotationTest08_Person {
String role() default "";
}
四 通过反射机制获取重复注解的信息
@AnnotationTest08_Person(role = "son")
@AnnotationTest08_Person(role = "CEO")
@AnnotationTest08_Person(role = "father")
@AnnotationTest08_Person(role = "friend")
public class AnnotationTest08 {
public static void main(String[] args) {
// 获取类
Class<AnnotationTest08> annotationTest08Class = AnnotationTest08.class;
// 获取该类使用的重复元注解信息
Annotation[] annotations = annotationTest08Class.getDeclaredAnnotationsByType(AnnotationTest08_Person.class);
// 输出注解信息
System.out.println(Arrays.toString(annotations));
}
}