繁体   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