Java 从AnnotationMirror获取元素注释
有没有比这更好的方法从AnnotationMirror获取元素注释?这对我来说真的很讨厌Java 从AnnotationMirror获取元素注释,java,annotations,Java,Annotations,有没有比这更好的方法从AnnotationMirror获取元素注释?这对我来说真的很讨厌 for (AnnotationMirror annotationMirror : element.getAnnotationMirrors()) { try { Class annotationClass = Class.forName(annotationMirror.getAnnotationType().toString()); Annotation annot
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的目标分开。