精通Java注解(3)- 注解可以重复定义吗?

296 阅读1分钟

java.lang.annotation.Repeatable是JDK 8引入的新注解,在JDK 8之前注解定义是不可重复的。

Persons.java

定义注解

@Target(ElementType.TYPE)  
@Retention(RetentionPolicy.RUNTIME)
public @interface Persons {
        //注意:这里方法名必须是value
	Person[] value();
Person.java

定义注解,指定@Repeatable

@Repeatable(Persons.class)
public @interface Person{
	String role() default "";
}
Man.java

具体使用:指定注解

@Person(role="CEO")
@Person(role="husband")
@Person(role="father")
@Person(role="son")
public class Man {
	String name = "";
}

实际应用

if(Man.class.isAnnotationPresent(Persons.class)) {
    Persons persons = Man.class.getAnnotation(Persons.class);
    for(Person person: persons.value()){
        System.out.println(person.role());
    }
 }