的getInterfaces()
方法TypeElement
只返回元素直接实现的接口。有没有一种简单的方法来查找给定的是否TypeElement
间接实现了给定的接口?
也就是说,我有一个TypeElement
并且我想知道它是否从给定接口下降。
的getInterfaces()
方法TypeElement
只返回元素直接实现的接口。有没有一种简单的方法来查找给定的是否TypeElement
间接实现了给定的接口?
也就是说,我有一个TypeElement
并且我想知道它是否从给定接口下降。
我从来没有真正使用过这些东西,只是阅读它。
我相信您可以遍历返回的类型并用于Types#isAssignable(TypeMirror t1, TypeMirror t2)
检查它们中的任何一个是否可分配给您正在寻找的接口(在这种情况下,如果 a 是 b 或 b 是 a 的超接口,则 a 可分配给 b - 但是有关完整定义,请参阅JLS 第 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
a在哪里ProcessingEnvironment
(见下面 ThePyroEagle 的评论)。
抱歉,我无法对此进行测试,而且我只是基于文档。你应该自己测试这些。
希望有帮助。