JAVA - 如何从Annotation中获取注释?

时间:2016-01-22 03:52:37

标签: java reflection annotations

我想从注释中获取注释,但奇怪的是我无法从注释实例中获取单个注释。我该如何解决这个问题?我想从这个注释实例中获取注释。

public static void test(Annotation annotation) {
    System.out.println("ValidBoolean annotation len:" + ValidBoolean.class.getAnnotations().length);
    System.out.println(annotation.getClass().getName() + ":" + annotation.getClass().getAnnotations().length);
    if (annotation instanceof ValidBoolean) {
        ValidBoolean validBoolean = (ValidBoolean) annotation;
        System.out.println("[BOOLEAN]" + validBoolean.getClass().getName() + ":" + validBoolean.getClass().getAnnotations().length);
    }
}

打印结果是:

ValidBoolean annotation len:3
com.sun.proxy.$Proxy28:0
[BOOLEAN]com.sun.proxy.$Proxy28:0

3 个答案:

答案 0 :(得分:3)

如果我理解正确,你想做

Annotation[] annotationAnnotations=annotation.annotationType().getAnnotations();

通常,annotationType()的作用是someClass.getAnnotation(someAnnotationClass).annotationType()==someAnnotationClass

因此annotation instanceof ValidBoolean也暗示annotation.annotationType() == ValidBoolean.class,因此在其上调用.getAnnotations()会产生相同的注释。

答案 1 :(得分:0)

看起来注释是代理对象

 validBoolean.getClass().getSuperclass().getAnnotations().length

答案 2 :(得分:0)

我相信您可以做到

TopLevelAnnotation topLevelAnnotation = anything.get.getAnnotation(TopLevelAnnotation.class);
NestedAnnotation nestedAnnotation = topLevelAnnotation.annotationType().getAnnotation(NestedAnnotation.class);

请检查

/**
 * Returns the annotation type of this annotation.
 * @return the annotation type of this annotation
 */
java.lang.annotation.Annotation#annotationType()

在java.lang.annotation.Annotation