如何使用Javassist删除方法?

Del*_*ibz 6 java javassist

我试图使用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"); 
 }
}
Run Code Online (Sandbox Code Playgroud)

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

javac -cp javassist.jar cRepair.java
Run Code Online (Sandbox Code Playgroud)

然后检查目标类:

javap -verbose RemoveMethod.class
Run Code Online (Sandbox Code Playgroud)

方法"DoubleCheck"仍在那里!

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

Ste*_*stl 3

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