我正在使用javassist创建一个类并为其添加注释。当我使用CtClass.writeFile并且我看到带有Java反编译器的类文件时,注释就在那里,但是当我使用class.getAnnotations()或class.getDeclaredAnnotations()时,列表为空。
ClassPool pool = ClassPool.getDefault();
pool.insertClassPath(new ClassClassPath(cl.loadClass("javax.jws.WebService")));
CtClass pikoClass = pool.makeClass("br.com.stuff.Piko");
ConstPool constPool = pikoClass.getClassFile().getConstPool();
AnnotationsAttribute attr = new AnnotationsAttribute(constPool, annotationsAttribute.visibleTag);
Annotation annoWebService = Annotation(constPool, pool.get("javax.jws.WebService"));
attr.setAnnotation(annoWebService);
pikoClass.getClassFile().addAttribute(attr);
Class piko = pikoClass.toClass();
piko.getDeclaredAnnotations(); // this is always empty
// Also tried
Annotation annoWebService = new Annotation("WebService", constPool);
Annotation annoWebService = new Annotation("@WebService", constPool);
Annotation annoWebService = new Annotation("javax.jwsWebService", constPool);
Annotation annoWebService = new Annotation("@javax.jwsWebService", constPool);
答案 0 :(得分:2)
问题解决了,我使用的是版本3.1,现在我正在使用3.12.1.GA(最后在maven存储库上),并且在这个版本上注释有效。
答案 1 :(得分:1)
也许我是愚蠢的,这是一个无用的答案,但如果你收到错误的话
注释是抽象的;无法实例化
请记住检查导入并确保导入正确的注释:
import javassist.bytecode.annotation.Annotation;
而不是Eclipse自动导入的错误库让我浪费了20分钟的生命( java.lang.annotation.Annotation )