我正在编写一个注释处理器,以便在编译时执行以下检查:
E
@Apply
,用于注释方法。@Apply
注释的方法应该被称为apply
,并且只接受实现E
的类的一个参数我已经知道所有带注释的方法apply
,并提取它们作为参数的类的名称。所以我离开了:
Element method // this is the Element that represents the `apply` method
TypeMirror mirror //method's TypeMirror
String paramClass // the parameter's class Name.
问题是:如果可以,我可以从这些参数的类层次结构表示中获取,所以我可以检查它是否实现了E
。
不能使用ClassLoader.loadClass
,因为该类已经不存在,但我只需要类层次结构。
答案 0 :(得分:0)
使用javax.lang.model.util.Types.isSubtype()
方法有一种简单的方法:
TypeMirror parameterTypes = mirror.getParameterTypes();
TypeMirror typeOfE = processingEnv.getElementUtils().getTypeElement(E.class.getName()).asType();
boolean isSubTypeOfE = processingEnv.getTypeUtils().isSubtype(parameterType, eventType)
我可以检查mirror
所代表的方法的参数类是否是所需类型的子类型E