gpt4 book ai didi

java - 检查源级别 AnnotationProcessors 中 Element 的继承

转载 作者:行者123 更新时间:2023-12-01 19:09:26 31 4
gpt4 key购买 nike

我正在寻找一种方法来检测一个类是否是从注释处理器中的另一个类/接口(interface)继承的。由于注释处理器在源代码上运行而不是运行时,因此无法使用 reflation 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()
);

}

}

但是即使 List 实现了 Collection,此方法也始终返回 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

关于java - 检查源级别 AnnotationProcessors 中 Element 的继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59494473/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com