我正在寻找一种方法来检测一个类是否继承自注释处理器中的另一个类/接口。由于注释处理器运行在源代码而不是运行时,因此无法使用再膨胀 API,我找到的唯一方法是:
public class MyProcessor extends AbstractProcessor {
@Override
public boolean process(final Set<? extends TypeElement> annotations, final RoundEnvironment roundEnv) {
// Simple test
processingEnv.getTypeUtils().isAssignable(
processingEnv.getElementUtils().getTypeElement("java.util.List").asType(),
processingEnv.getElementUtils().getTypeElement("java.util.Collection").asType()
);
}
}
但此方法始终返回 false,即使该列表实现了集合。知道吗?
感谢Slaw的评论。此解决方案似乎有效:
public class MyProcessor extends AbstractProcessor {
@Override
public boolean process(final Set<? extends TypeElement> annotations, final RoundEnvironment roundEnv) {
// Simple test
processingEnv.getTypeUtils().isAssignable(
processingEnv.getTypeUtils().erasure(processingEnv.getElementUtils().getTypeElement("java.util.List").asType()),
processingEnv.getTypeUtils().erasure(processingEnv.getElementUtils().getTypeElement("java.util.Collection").asType())
);
}
}
您可以在此处找到有关擦除及其功能的更多信息:https://www.tutorialspoint.com/java_generics/java_generics_type_erasure.htm