【发布时间】:2018-11-01 16:25:44
【问题描述】:
代码结构
假设我们有这样的结构:
class A {
@AMethodAnnotation("my-data")
public void myMethod() {
}
}
@MyClassAnnotation
class B extends A {
@Override
public void myMethod() {
}
}
我正在努力实现的目标
使用注释处理我试图从位于类A 内的方法myMethod 上的注释AMethodAnnotation 中提取数据。 B 类扩展了这个类并覆盖了它的方法 myMethod。
如果里面的类有注释MyClassAnnotation,我想要来自带有AMethodAnnotation的方法的数据。
我正在获取带有注释MyClassAnnotation 的类并循环通过enclosedElements,在那里我可以检查它是否具有Override 注释,但我不确定如何获取它覆盖的方法,因为那是AMethodAnnotation 与我想要的数据所在的位置。 ExecutableElement 似乎没有提供获取此信息的方法。
for (Element classElement : roundEnv.getElementsAnnotatedWith(MyClassAnnotation.class)) {
// Make sure it's a class
if (classElement.getKind() != ElementKind.CLASS) {
continue;
}
// Loop through methods inside class
for (Element methodElement : classElement.getEnclosedElements()) {
// Make sure the element is a method & has a @Path annotation
if (methodElement.getKind() != ElementKind.METHOD) {
continue;
}
// If method has @Override annotation do stuff
}
}
问题
有没有办法获得对被覆盖的方法的引用?
有一种方法,你得到B 的超类A,然后循环遍历A 中的enclosedElements,那么你必须验证方法名称是否相同,如果参数相同且顺序相同。但我发现这种方法需要大量检查,因此我的问题是是否有更好的方法。
【问题讨论】:
-
@rmuller 感谢这帮了我很大的忙,我能够解决它,看看我自己对这个问题的回答。
标签: java annotations annotation-processing annotation-processor