代码结构
假设我们有一个这样的结构:
class A {
@AMethodAnnotation("my-data")
public void myMethod() {
}
}
@MyClassAnnotation
class B extends A {
@Override
public void myMethod() {
}
}
我正在努力实现的目标
使用注释处理,我试图从AMethodAnnotation位于myMethodclass 内部方法上的注释中提取数据A。类B扩展了这个类并覆盖了它的方法myMethod。
扭曲的是我想要来自方法的数据,AMethodAnnotation如果它在里面的类有 annotation MyClassAnnotation。
我正在获取带有注释的类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
}
}
问题
有没有办法获得对被覆盖的方法的引用?
有一种方法,您获取Bis的超类A并循环遍历enclosedElementsin A,然后您必须验证方法名称是否相同,以及参数是否相同且顺序相同。但是我发现这种方法需要大量检查,因此我的问题是是否有更好的方法。
慕妹3242003
相关分类