簡體   English   中英

Java注釋-如何檢查帶注釋的元素是否實現了接口?

[英]Java Annotations - How can you check if an annotated element implements an interface?

假設我有一個類,並且在這個類中,我有一個實現MyInterface的對象的實例,該實例由@MyAnnotation注釋

在我的注釋編譯器中,我獲得了由@MyAnnotation注釋的Elements的列表。

@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?
    }
    ...
}

我了解我可以列出實現該接口的類,然后檢查該元素表示的類是否為這些類之一,但顯然此解決方案並不理想

有人知道這是否可能嗎?

找到了答案:

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());
}

可以使用instanceof檢查任何定義為接口實現的類。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM