簡體   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