gpt4 book ai didi

java - 如何从 Eclipse 中的注释处理器加载类?

转载 作者:行者123 更新时间:2023-11-30 10:56:00 24 4
gpt4 key购买 nike

我实现了一个注释处理器,我正在尝试加载一个被正在处理的当前文件的某些嵌套元素引用的类,例如方法的返回类型。

当我使用 javac 从命令行运行此代码并传递当前项目类路径时,它成功运行,但是当使用 eclipse 时,我收到 ClassNotFoundException。请参见下面的示例:

public class MyAnnotationProcessor extends AbstractProcessor {

@Override
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {

for (TypeElement element : annotations) {
try {
TypeElement type = getMethodReturnType(element);
Class<?> class1 = Class.forName(type.getQualifiedName().toString());
// ..
// do some processing with class1
// ...

} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
return false;
}

我发现在eclipse中processor没有当前项目的classpath。我可以创建一个 URLClassLoader 来加载那些需要的类,但找不到获取当前项目路径的方法。

有没有办法从注释处理器中获取项目路径?

最佳答案

我放弃了这个,看来你不应该从注释处理器加载引用的类。相反,您应该使用 Processing Environment 中的 typeUtils 和 elementUtils 来满足您的任何需要。

似乎除了调用引用类中的代码之外,您可以做任何事情,例如,验证给定类型是否实现了某个接口(interface):

TypeMirror interfaceType = processingEnv.getElementUtils().getTypeElement("my.interfaceType").asType();
if(processingEnv.getTypeUtils().isAssignable(type, interfaceType)){
// do something
}

关于java - 如何从 Eclipse 中的注释处理器加载类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33159316/

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