如何在注释处理中获取超类名称

时间:2015-06-03 09:49:55

标签: java annotations

我运行自己编写的注释处理器,根据带注释的类生成一些新的java代码。以下是我试图获取当前处理类的超类名称。

TypeMirror superTypeMirror = typeElement.getSuperclass();
final TypeKind superClassName = superTypeMirror.getKind();
log("A==================" + superClassName.getClass());
log("B==================" + superClassName.getDeclaringClass());

typeElement返回注释处理器正在处理的当前类。我想知道这个类扩展了哪些类以及这个类实现了哪些类。我使用的方法根本没用。

Thankx

2 个答案:

答案 0 :(得分:9)

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

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

无论它们是代表超类还是超级接口,您都应该能够将它们转换为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()和{{{}}即可直接获取超类和超级接口。 1}}分开(而不是typeElement.getInterfaces()),但过程的其余部分是相同的。

答案 1 :(得分:-3)

您可以通过反射找到任何Java Object的超类。这里解释http://da2i.univ-lille1.fr/doc/tutorial-java/reflect/class/getSuperclass.html

关于实施课程。这更难,因为我相信一个给定的类永远不会“知道”哪个类扩展它。你需要建立一个精心设计的遗产树才能全面了解。