首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用javassist添加注释将删除以前的代码

问使用javassist添加注释将删除以前的代码
EN

Stack Overflow用户
提问于 2012-08-02 21:25:00
回答 1查看 1.3K关注 0票数 1

我正在尝试在加载类时为它们添加一些注释。

为此,我编写了一个java代理转换器,它在加载时获取类字节码,并可以对其进行更改。当我运行下面的代码时,新的注解出现在类中,但是所有以前的注解和字段/方法都被删除了。

代码语言:javascript
复制
CtClass ctClass = classPool.makeClass(new java.io.ByteArrayInputStream(classFileBuffer));
ClassFile classFile = clazz.getClassFile();
ConstPool constPool = classFile.getConstPool();
AnnotationsAttribute attr= new AnnotationsAttribute(constPool, AnnotationsAttribute.visibleTag);
javassist.bytecode.annotation.Annotation annotation = new javassist.bytecode.annotation.Annotation(type, constPool);
attr.setAnnotation(annotation);
classFile.addAttribute(attr);
classFileBuffer = ctClass.toBytecode();

其中classFileBuffer是返回给类加载器的字节数组。如果有人知道为什么要删除以前的类注释和代码,这将非常有帮助。

谢谢,

Avner

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-03 17:43:46

setAnnotation只接受一个类型为Annotation的参数,并删除所有其他注释。如果要在现有注释中添加注释,请改用setAnnotations。它接受一个Annotation数组,因此您必须首先通过收集所有现有注释(使用getAnnotations)来构建数组,然后在末尾添加Annotation,然后调用该方法。

setAnnotation(annotation)调用等同于setAnnotations(new Annotation[] { annotation })

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11778386

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档