我试图使用从类文件中删除(一种方法)。
目标类:"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“仍然存在!
这看起来真的很奇怪。为什么会发生这种情况,以及如何解决?
发布于 2015-05-17 08:08:52
您的代码将类的字节码读入内存并删除该方法。但是它不会将修改过的字节码写回.class文件。你可以打电话给CtClass#writeFile()这样做。
https://stackoverflow.com/questions/30283508
复制相似问题