gpt4 book ai didi

java - 如何使用 Javassist 删除方法?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:25:04 25 4
gpt4 key购买 nike

我正在尝试使用 Javassist 从类文件中删除一个方法。

目标类:“RemoveMethod”

目标方法:“DoubleCheck”

我的代码:

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”运行代码:

javac -cp javassist.jar cRepair.java

然后查看目标类:

javap -verbose RemoveMethod.class

“DoubleCheck”方法还在!

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

最佳答案

您的代码将类的字节码读入内存并删除该方法。但它不会将修改后的字节码写回 .class 文件。您可以调用 CtClass#writeFile() 来执行此操作。

关于java - 如何使用 Javassist 删除方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30283508/

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