📌  相关文章
📜  Java中的 AnnotatedElement getAnnotationsByType() 方法及示例(1)

📅  最后修改于: 2023-12-03 15:16:20.007000             🧑  作者: Mango

Java中的 AnnotatedElement getAnnotationsByType() 方法及示例

介绍

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 循环一起使用来遍历并处理这些注解。