我运行自己编写的注释处理器,根据带注释的类生成一些新的java代码。以下是我试图获取当前处理类的超类名称。
TypeMirror superTypeMirror = typeElement.getSuperclass();
final TypeKind superClassName = superTypeMirror.getKind();
log("A==================" + superClassName.getClass());
log("B==================" + superClassName.getDeclaringClass());
typeElement返回注释处理器正在处理的当前类。我想知道这个类扩展了哪些类以及这个类实现了哪些类。我使用的方法根本没用。
Thankx
答案 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() );
}
如果typeElement
是TypeMirror
,则上述方法有效,如果是TypeElement
,只需调用typeElement.getSuperclass()
和{{{}}即可直接获取超类和超级接口。 1}}分开(而不是typeElement.getInterfaces()
),但过程的其余部分是相同的。
答案 1 :(得分:-3)
您可以通过反射找到任何Java Object的超类。这里解释http://da2i.univ-lille1.fr/doc/tutorial-java/reflect/class/getSuperclass.html
关于实施课程。这更难,因为我相信一个给定的类永远不会“知道”哪个类扩展它。你需要建立一个精心设计的遗产树才能全面了解。