繁体   English   中英

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

[英]How to tell if a TypeElement indirectly implements an interface

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

也就是说我有一个TypeElement ,我想知道它是否从某个给定的接口下行的某个地方。

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

我相信你可以迭代返回的类型并使用Types#isAssignable(TypeMirror t1, TypeMirror t2)来检查它们中的任何一个是否可以分配给你正在寻找的接口(在这种情况下,如果a是b,则可以分配给b)或b是a的超接口 - 但是对于完整定义,请参阅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);
}

其中processingEnvProcessingEnvironment (请参阅下面的ThePyroEagle的评论)。

对不起,我无法测试这个,而且,我只是基于文档 你应该自己测试一下。

希望有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM