Jdk8允许注解多次声明在某属性上。
自定义注解:
/**
* 自定义重复注解 ==》 注解可以在某个方法、类、属性上多次出现
*/
@Repeatable(MyAnnotations.class)//该注解声明当前自定义注解可重复使用
@Target({CONSTRUCTOR,FIELD,METHOD,PARAMETER,TYPE,LOCAL_VARIABLE})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
String value() default "rain";
}
@Target({CONSTRUCTOR,FIELD,METHOD,PARAMETER,TYPE,LOCAL_VARIABLE})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotations {
MyAnnotation[] value();
}
实现类:
@Test
public void testAnnotation() throws Exception{
Class<Test1> myAnnotation = Test1.class;
Method show = myAnnotation.getMethod("show");
MyAnnotation[] annotations = show.getAnnotationsByType(MyAnnotation.class);
for (MyAnnotation annotation : annotations) {
String value = annotation.value();
System.out.println(value);
}
System.out.println("-----------------------------------------------");
Annotation[] annotations1 = show.getAnnotations();
for (Annotation annotation : annotations1) {
if (annotation instanceof MyAnnotations){
MyAnnotations an = (MyAnnotations)annotation;
MyAnnotation[] value = an.value();
for (MyAnnotation myAnnotation1 : value) {
System.err.println(myAnnotation1.value());
}
}
}
}
/**
* 等同于使用 @MyAnnotations({@MyAnnotation("下雨天"),@MyAnnotation})
*/
@MyAnnotation("下雨天")
@MyAnnotation
public void show(){
}