Próbuję usunąć metodę z pliku klasy przy użyciu Javassist.Jak usunąć metodę przy użyciu Javassist?
Klasa docelowa: "RemoveMethod"
.
Metoda docelowa: "DoubleCheck"
.
Moi kody:
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");
}
}
Następnie uruchomić kod za pomocą pliku "javassist.jar":
javac -cp javassist.jar cRepair.java
następnie sprawdzić klasę docelowa:
javap -verbose RemoveMethod.class
Sposób "DoubleCheck" nadal tam jest!
To wygląda naprawdę dziwnie. Dlaczego tak się stało i jak to naprawić?
wywołanie javac po prostu kompiluje twój kod, nie uruchamia go. – muued
@muued, Dzięki człowieku. Ma sens! Próbowałem uruchomić kod za pomocą: "java cRepair", ale system mówi "nie mógł znaleźć lub załadować głównej klasy cRepair" – Delibz
uruchom 'java -cp javassist.jar javassist.cRepair' – muued