如何判断TypeElement是否间接实现了接口

时间:2013-08-13 00:21:23

标签: java annotation-processing

TypeElement的{​​{3}}方法仅返回由元素直接实现的接口。是否有一种简单的方法可以找到给定的TypeElement是否间接实现给定的接口?

也就是说我有一个TypeElement,我想知道它是否来自某个接口的某个地方。

1 个答案:

答案 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);
}

processingEnvProcessingEnvironment的位置(请参阅下面的ThePyroEagle的评论)。

抱歉,我无法测试这一点,而且,我只是基于documentation。你应该自己测试一下。

希望有所帮助。