Java 从AnnotationMirror获取元素注释

Java 从AnnotationMirror获取元素注释,java,annotations,Java,Annotations,有没有比这更好的方法从AnnotationMirror获取元素注释?这对我来说真的很讨厌 for (AnnotationMirror annotationMirror : element.getAnnotationMirrors()) { try { Class annotationClass = Class.forName(annotationMirror.getAnnotationType().toString()); Annotation annot

有没有比这更好的方法从AnnotationMirror获取元素注释?这对我来说真的很讨厌

for (AnnotationMirror annotationMirror : element.getAnnotationMirrors()) {
    try {
        Class annotationClass = Class.forName(annotationMirror.getAnnotationType().toString());
        Annotation annotation = element.getAnnotation(annotationClass);
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }
}
我想你只是想:

javax.lang.model.element.element

<A extends Annotation> A getAnnotation(Class<A> annotationType)
A getAnnotation(类annotationType)
返回指定类型的此元素的注释(如果 注释存在,否则为空。注释可以是 继承或直接存在于此元素上

并显式提供一个类(例如,
name.class


很难理解为什么要使用
Class.forName(variable)
而不是
name.Class
来显式命名类。如果您使用forName调用,您实际上不知道您得到的注释类型。你必须在它后面加上一个
实例或类似的东西来检查你得到了什么注释,在这种情况下,你还不如直接请求注释类型。

简单的回答是:这是不可能的——你必须使用
Class.forName()

包(和子包)是为处理源代码而设计的(主要用例为)。在这些情况下,您通常尚未为正在处理的生成二进制工件(即
.class
文件),因此调用
class.forName()
可能会失败


如果您能提供更多有关
元素
来源的详细信息,或者在获得
注释
后,您希望对其执行什么操作,我们可能会提供更多指导。
annotationMirror.getAnnotationType()
返回的方法很可能比第4行更可靠地提供对所需信息的访问。

我在第4行使用该方法,并从第3行为其提供类。我正在寻找一种方法来避免
Class.forName()
。元素
来自哪里?这段代码是否打算成为注释处理器的一部分?也许您可以扩展预期的输出。就目前的情况而言,这座大楼什么也没做。也许您需要某个特定类的输出?我不知道OP的情况,但我发现这个问题是为了在方法上查找同级注释,即我找到了带有@SomeAnnotation的类注释,然后对该类的成员进行迭代,试图找到每个成员上的批注以及附加到这些成员上的值。@SaadFarooq,您是在运行时(从
java.lang.class.getAnnotations()
或类似程序开始)还是在批注处理器内进行此搜索?你可以问一个新问题,这样我们就可以把你的目标和@MichaelPardo的目标分开。