2015-10-01 23 views
0

假設我有一個類,並在這個班,我有一些對象實現MyInterface的,這是由@MyAnnotationJava註解 - 如何檢查註釋元素是否實現接口?

註釋在我的註釋編譯器的實例,我得到的是通過註釋的元素列表@MyAnnotation

@Override 
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) { 
    Set<? extends Element> elements = roundEnv.getElementsAnnotatedWith(MyAnnotation.class); 

    for (Element element : elements) { 
     // How can I check if the class that `element` represents, implements my interface? 
    } 
    ... 
} 

我明白,我可以有實現該接口的類的列表,然後檢查是否該元素代表類是這些類之一,但顯然這種解決方案並不理想

有誰知道這是可能的嗎?

回答

0

任何定義爲您的界面實現的類都可以使用instanceof進行檢查。

if (element instanceof MyInterface) { 
    // your code here! 
} 
+0

這不是一個正常的對象。 Element對象不是實際的實例,它是一個存儲關於實例的一些信息的數據模型。因此它不會是接口的一個實例 – Moez

1

找到了答案:

public static boolean isInstanceOf(Types types, Elements elements, String class1, String class2) { 
    Element element1 = elements.getTypeElement(class1); 
    Element element2 = elements.getTypeElement(class2); 

    if (element1 == null || element2 == null) { 
     return false; 
    } 

    return types.isAssignable(element1.asType(), element2.asType()); 
} 
相關問題