Java如何获取所有注解?

要获取类,方法,构造函数或字段的所有注释,我们使用getAnnotations()方法。此方法返回一个数组Annotation

在以下示例中,我们尝试从该sayHi()方法读取所有注释。首先,我们需要获取自身的方法对象。因为sayHi()方法具有参数,所以我们不仅需要将方法名称传递给getMethod()方法,而且还需要传递参数的类型。

该getAnnotations()方法仅返回具有的注释RetentionPolicy.RUNTIME。因为其他保留策略不允许注释在运行时可用。

package org.nhooo.example.lang.annotation;

import java.lang.annotation.Annotation;

import java.lang.reflect.Method;

import java.util.HashMap;

import java.util.Map;

public class GetAllAnnotation {

    private Map<String, String> data = new HashMap<>();

    @SuppressWarnings("unchecked")

    public static void main(String args[]) {

        GetAllAnnotation demo = new GetAllAnnotation();

        demo.sayHi("001", "Alice");

        demo.sayHi("004", "Malory");

        try {

            Class clazz = demo.getClass();

            // 要获得sayHi()方法,我们不仅需要传递方法

            // 名称及其参数类型,因此使用getMethod()方法

            // 返回正确的方法供我们使用。

            Method method = clazz.getMethod("sayHi", String.class, String.class);

            //从sayHi()方法获取所有注释。但这实际上

            //将仅返回一个注释。因为只有HelloAnnotation

            // 具有RUNTIME保留策略的注释,这意味着

            // 与sayHi()方法关联的其他注释不是

            // 在运行时可用。

            Annotation[] annotations = method.getAnnotations();

            for (Annotation anno : annotations) {

                System.out.println("Type: " + anno.annotationType());

            }

        } catch (NoSuchMethodException e) {

            e.printStackTrace();

        }

    }

    @SuppressWarnings("unchecked")

    @MyAnnotation("Hi")

    @HelloAnnotation(value = "Hello", greetTo = "Everyone")

    public void sayHi(String dataId, String name) {

        Map data = getData();

        if (data.containsKey(dataId)) {

            System.out.println("Hello " + data.get(dataId));

        } else {

            data.put(dataId, name);

        }

    }

    private Map<String, String> getData() {

        data.put("001", "Alice");

        data.put("002", "Bob");

        data.put("003", "Carol");

        return data;

    }

}

package org.nhooo.example.lang.annotation;

public @interface MyAnnotation {

    String value();

}

检查HelloAnnotation以下链接上的“如何创建简单注释”。

此代码段的结果:

Hello Alice

Type: interface org.nhooo.example.lang.annotation.HelloAnnotation

                       

以上是 Java如何获取所有注解? 的全部内容, 来源链接: utcz.com/z/334621.html

回到顶部