假设我有一个类,在这个类中,我有一个实现MyInterface的对象的实例,它由@MyAnnotation注释
在我的注释编译器中,我得到了一个由@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 :(得分:2)
找到答案:
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());
}
答案 1 :(得分:0)
可以使用instanceof
检查任何定义为界面实现的类。
if (element instanceof MyInterface) {
// your code here!
}