注释处理中如何获取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() );
}
如果 typeElement
是 TypeMirror
,上面的方法有效,如果它是 TypeElement
,你可以通过简单地调用 typeElement.getSuperclass()
和typeElement.getInterfaces()
分别(而不是 Types.directSupertypes()
),但其余过程相同。
我 运行 我自己编写的注释处理器,用于根据注释的 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() );
}
如果 typeElement
是 TypeMirror
,上面的方法有效,如果它是 TypeElement
,你可以通过简单地调用 typeElement.getSuperclass()
和typeElement.getInterfaces()
分别(而不是 Types.directSupertypes()
),但其余过程相同。