4

getInterfaces()方法TypeElement只返回元素直接实现的接口。有没有一种简单的方法来查找给定的是否TypeElement间接实现了给定的接口?

也就是说,我有一个TypeElement并且我想知道它是否从给定接口下降。

4

1 回答 1

5

我从来没有真正使用过这些东西,只是阅读它。

我相信您可以遍历返回的类型并用于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);
}

processingEnva在哪里ProcessingEnvironment(见下面 ThePyroEagle 的评论)。

抱歉,我无法对此进行测试,而且我只是基于文档。你应该自己测试这些。

希望有帮助。

于 2013-08-13T01:44:03.287 回答