[英]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.