Ich versuche löschen eine Methode aus einer Klassendatei mit Javassist.Wie entferne ich eine Methode mit Javassist?
Zielklasse: "RemoveMethod"
.
Zielmethode: "DoubleCheck"
.
Meine Codes:
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");
}
}
Dann den Code mit Hilfe der Datei "javassist.jar" laufen:
javac -cp javassist.jar cRepair.java
dann die Zielklasse überprüfen:
javap -verbose RemoveMethod.class
Verfahren "DoubleCheck" ist immer noch da!
Das sieht wirklich merkwürdig aus. Warum konnte das passieren und wie konnte es behoben werden?
der javac call kompiliert nur Ihren Code, er führt ihn nicht aus. – muued
@muued, Danke Mann. Es macht Sinn! Ich habe versucht, den Code mit: "java cRepair", aber das System sagt "konnte nicht finden oder laden die Hauptklasse cRepair" – Delibz
run 'java -cp javassist.jar javassist.cRepair' – muued