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

JAVA-如何从注释中获取注释?,java,reflection,annotations,Java,Reflection,Annotations,我想从注释中获取注释,但奇怪的是我无法从注释实例中获取单个注释。我如何解决这个问题?我想从此注释实例获取注释 public static void test(Annotation annotation) { System.out.println("ValidBoolean annotation len:" + ValidBoolean.class.getAnnotations().length); System.out.println(annotation.getClass().

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

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

看起来注释是一个代理对象

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

如果我理解正确,您希望:

Annotation[] annotationAnnotations = annotation.annotationType().getAnnotations();
一般来说,其工作原理如下:

someClass.getAnnotation(someAnnotationClass).annotationType() == someAnnotationClass
因此,ValidBoolean的
注释实例
也意味着
注释.annotationType()==ValidBoolean.class
,因此对它们调用
.getAnnotations()
将产生相同的注释。

我相信你可以做到

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中,注释仍不起作用。您知道如何从代理获取注释吗?我对这个不太熟悉。我还是不太了解这个代理机制。但是我可以通过
Annotation.annotationType()
而不是
Annotation.getClass()
来获得真正的类,因为Annotation只是一个接口,所以
Annotation.getClass()
只会产生一个Java代理对象!