首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Javassist删除方法?

如何使用Javassist删除方法?
EN

Stack Overflow用户
提问于 2015-05-17 04:54:49
回答 1查看 1.6K关注 0票数 6

我试图使用从类文件中删除(一种方法)。

目标类:"RemoveMethod"

目标方法:"DoubleCheck"

我的密码:

代码语言:javascript
复制
package javassist;     
        import java.io.IOException;
        import java.lang.reflect.Method;
        import javassist.*;

public class cRepair {
    public static void main(String[] args) throws NotFoundException, IOException, CannotCompileException{
    ClassPool pool = ClassPool.getDefault();  
    CtClass ctClass = pool.get("javassist.RemoveMethod");  
    CtMethod ctm = ctClass.getDeclaredMethod("DoubleCheck");  
    ctClass.removeMethod(ctm);
    ctClass.writeFile("C:/Users/workspace/Javaproject1/src/javassis"); 
 }
}

然后,使用“javassist.jar”文件运行代码:

代码语言:javascript
复制
javac -cp javassist.jar cRepair.java

然后检查目标类:

代码语言:javascript
复制
javap -verbose RemoveMethod.class

方法"DoubleCheck“仍然存在!

这看起来真的很奇怪。为什么会发生这种情况,以及如何解决?

EN

回答 1

Stack Overflow用户

发布于 2015-05-17 08:08:52

您的代码将类的字节码读入内存并删除该方法。但是它不会将修改过的字节码写回.class文件。你可以打电话给CtClass#writeFile()这样做。

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

https://stackoverflow.com/questions/30283508

复制
相关文章

相似问题

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