使用反射读取类中定义的受保护注释

时间:2013-12-13 23:01:19

标签: java reflection

我在java中创建了一个类,如下所示:

public class TestAnnotations {
    @Retention(value=RetentionPolicy.RUNTIME)
    @Target(value=ElementType.FIELD)
    protected @interface Addition
    {
        String location();
    }
}

如何使用反射获取有关在类中定义的注释的信息。更具体地说,我正在寻找诸如添加类型,当然名称及其中的字段等信息。

1 个答案:

答案 0 :(得分:2)

您可以使用Class#getDeclaredClasses()

  

返回反映所有类和的Class对象数组   声明为此Class表示的类的成员的接口   对象

然后,您可以遍历数组,检查该类是否为Class#isAnnotation()的注释。

实施例

public class Driver {
    public static void main(String[] args) throws Exception {
        Class<?>[] classes = Driver.class.getDeclaredClasses();
        System.out.println(Arrays.toString(classes));
        for (Class<?> clazz : classes) {
            if (clazz.isAnnotation()) {
                Method[] methods = clazz.getDeclaredMethods();
                for (Method method : methods) {
                    System.out.println(method);
                }
            }
        }
    }

    @Retention(value=RetentionPolicy.RUNTIME)
    @Target(value=ElementType.FIELD)
    protected @interface Addition
    {
        String location();
    }
}

打印

[interface com.spring.Driver$Addition]
public abstract java.lang.String com.spring.Driver$Addition.location()