📅  最后修改于: 2023-12-03 15:16:20.007000             🧑  作者: Mango
Java 8 中新增了 getAnnotationsByType(Class<T> annotationClass)
方法,可以获取某个元素(如类、方法、字段)上指定类型的多个注解。这个方法在某些情况下比 getAnnotation(Class<T> annotationClass)
方法更加方便。
public <T extends Annotation> T[] getAnnotationsByType(Class<T> annotationClass)
T
: 注解类型annotationClass
: 注解类型的 Class 对象创建一个自定义注解 MyAnnotation
和一个使用该注解的类:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@interface MyAnnotation {
String value();
}
@MyAnnotation("MyClass")
public class MyClass {
//...
}
使用 getAnnotationsByType()
方法获取 MyAnnotation
类型的注解:
public class Main {
public static void main(String[] args) {
Class<MyClass> cls = MyClass.class;
MyAnnotation[] annotations = cls.getAnnotationsByType(MyAnnotation.class);
for (MyAnnotation annotation : annotations) {
System.out.println(annotation.value()); // 输出 "MyClass"
}
}
}
代码输出结果为:
MyClass
MyAnnotation
注解使用了 @Retention(RetentionPolicy.RUNTIME)
修饰,保证在运行时可以获取到这个注解。MyAnnotation
注解使用了 @Target(ElementType.TYPE)
修饰,表示只能应用在类上。MyClass
类使用了 @MyAnnotation("MyClass")
注解,会在运行时保留这个注解,并且这个注解的值为 "MyClass"
。cls.getAnnotationsByType(MyAnnotation.class)
返回一个数组,包含 MyClass
类上的所有 MyAnnotation
类型的注解,数组的长度为 1。for (MyAnnotation annotation : annotations)
循环遍历数组,输出注解的值 "MyClass"
。getAnnotationsByType()
方法可以方便地获取某个元素上指定类型的多个注解。它返回一个注解数组,可以和 for
循环一起使用来遍历并处理这些注解。