📜  用示例在Java中封装 getAnnotationsByType() 方法(1)

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

在Java中封装 getAnnotationsByType() 方法

在Java中,我们经常需要获取类或方法的注解信息。Java提供了getAnnotation()方法来获取指定类型的注解,而getAnnotationsByType()则是Java 8中新增的方法,可以获取指定类型的全部注解。

然而,在Java 8之前的版本中,我们无法使用getAnnotationsByType()方法,这就需要我们手动实现一个方法来获取指定类型的注解。

封装 getAnnotationsByType() 方法

以下是一个简单的工具类,封装了getAnnotationsByType()方法,使用时只需要传入需要获取的注解类型和目标对象即可获取指定类型的全部注解。

import java.lang.annotation.Annotation;
import java.util.ArrayList;
import java.util.List;

public class AnnotationUtils {

    /**
     * 获取指定类型的全部注解
     * @param clazz 注解类型
     * @param target 目标对象
     * @param <T> 注解类型
     * @return 注解列表
     */
    public static <T extends Annotation> List<T> getAnnotationsByType(Class<T> clazz, Object target) {
        List<T> annotations = new ArrayList<T>();
        for (Annotation annotation : target.getClass().getAnnotations()) {
            if (clazz.isInstance(annotation)) {
                annotations.add((T)annotation);
            }
        }
        return annotations;
    }
}
使用示例

考虑下面的一个注解类型:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MyAnnotation {
    String value() default "";
}

现在我们来尝试获取一个方法上的所有MyAnnotation注解。假设我们有以下类:

public class MyClass {
    @MyAnnotation("hello")
    public void myMethod() {
        // do something
    }
}

我们可以使用以下代码来获取myMethod()方法上的所有MyAnnotation注解:

List<MyAnnotation> annotations = AnnotationUtils.getAnnotationsByType(MyAnnotation.class, new MyClass());
for (MyAnnotation annotation : annotations) {
    System.out.println(annotation.value());
}

运行结果:

hello

如上所示,我们成功使用工具类中封装的方法获取了指定类型的全部注解。