我正在尝试使用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"还在那里!
这看起来很奇怪。为什么会发生这种情况以及如何解决?
答案 0 :(得分:3)
您的代码将类的字节码读入内存并删除该方法。但它不会将修改后的字节码写回.class
文件。
您可以致电CtClass#writeFile()
来执行此操作。