[英]How to tell if a TypeElement indirectly implements an interface
TypeElement
的getInterfaces()
方法仅返回由元素直接实现的接口。 是否有一种简单的方法来查找给定的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);
}
其中processingEnv
是ProcessingEnvironment
(请参阅下面的ThePyroEagle的评论)。
对不起,我无法测试这个,而且,我只是基于文档 。 你应该自己测试一下。
希望有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.