注释处理中如何获取superclass名称

How to get the super class name in annotation processing

我 运行 我自己编写的注释处理器,用于根据注释的 class 生成一些新的 java 代码。以下是我试图获取当前处理的 class.

的超级 class 名称
TypeMirror superTypeMirror = typeElement.getSuperclass();
final TypeKind superClassName = superTypeMirror.getKind();
log("A==================" + superClassName.getClass());
log("B==================" + superClassName.getDeclaringClass());

typeElement returns 我当前 class 注释处理器正在处理。我想知道它扩展了哪些 classes 以及这个 class 实现了哪些 classes。我用的方法一点用都没有。

谢谢

你可以通过反射找到任何Java对象的超class。此处解释 http://da2i.univ-lille1.fr/doc/tutorial-java/reflect/class/getSuperclass.html

关于实施 classes。这更困难,因为我相信给定的 class 永远不会 "knows" class 扩展它。您将需要构建一个精心设计的继承树来获得全貌。

如果我理解正确的话,Types.directSupertypes()就是你需要的方法。

它将首先 return 直接超类的类型,然后是(直接)实现的接口,如果有的话。

不管它们是表示超类还是超接口,您都应该能够将它们转换为 DeclaredType,它有一个 asElement() 方法,可用于简单查询事物完全限定名称。

所以你会有这样的东西:

for (TypeMirror supertype : Types.directSupertypes(typeElement)) {
   DeclaredType declared = (DeclaredType)supertype; //you should of course check this is possible first
   Element supertypeElement = declared.asElement();
   System.out.println( "Supertype name: " + superTypeElement.getSimpleName() );
}

如果 typeElementTypeMirror,上面的方法有效,如果它是 TypeElement,你可以通过简单地调用 typeElement.getSuperclass()typeElement.getInterfaces() 分别(而不是 Types.directSupertypes()),但其余过程相同。