TypeElement
的{{3}}方法仅返回由元素直接实现的接口。是否有一种简单的方法可以找到给定的TypeElement
是否间接实现给定的接口?
也就是说我有一个TypeElement
,我想知道它是否来自某个接口的某个地方。
答案 0 :(得分:4)
我从来没有真正使用过任何这些东西,只是阅读它。
我相信您可以迭代返回的类型并使用Types#isAssignable(TypeMirror t1, TypeMirror t2)
检查它们中的任何一个是否可分配给您正在查找的接口(在此上下文中,如果a是b或b,则可分配给b是a的超接口 - 但是对于完整定义,请参阅JLS section 5.2)。类似的东西:
public static boolean implementsInterface (TypeElement myTypeElement, TypeMirror desiredInterface) {
for (TypeMirror t : myTypeElement.getInterfaces())
if (processingEnv.getTypeUtils().isAssignable(t, desiredInterface))
return true;
return false;
}
或者,甚至更好,直接,像这样(也许):
public static boolean implementsInterface (TypeElement myTypeElement, TypeMirror desiredInterface) {
return processingEnv.getTypeUtils().isAssignable(myTypeElement.asType(), desiredInterface);
}
processingEnv
是ProcessingEnvironment
的位置(请参阅下面的ThePyroEagle的评论)。
抱歉,我无法测试这一点,而且,我只是基于documentation。你应该自己测试一下。
希望有所帮助。