Ich möchte true auch in Java mit == 1 && a == 2 && a == 3 ausgeben.
Da es sich um Java (?) Handelt, wird der if-Beurteilungsteil in eine andere Klasse extrahiert. Machen Sie es zu einer statischen Methode, da der Wert des Arguments nicht neu geschrieben wird.
package study.javassist;
public class Judge {
public static boolean judge(int a) {
if (a == 1 && a == 2 && a == 3) {
return true;
} else {
return false;
}
}
}
Die Hauptklasse, die die obige Klasse aufruft, ist wie folgt.
package study.javassist;
import javassist.CannotCompileException;
import javassist.ClassPool;
import javassist.CtClass;
import javassist.CtMethod;
import javassist.NotFoundException;
public class JudgeCall {
public static void main(String[] args) {
try {
new JudgeCall().execute();
} catch (NotFoundException | CannotCompileException e) {
e.printStackTrace();
}
}
private void execute() throws NotFoundException, CannotCompileException {
ClassPool cp = ClassPool.getDefault();
CtClass cc = cp.get("study.javassist.Judge");
CtMethod method = cc.getDeclaredMethod("judge");
String newJudgeMethod = "{return true;}";
method.setBody(newJudgeMethod);
cc.toClass();
System.out.println(Judge.judge(1));
System.out.println(Judge.judge(2));
System.out.println(Judge.judge(3));
System.out.println(Judge.judge(4));
}
}
true
true
true
true
Bei der Methode execute () wird der Verarbeitungsinhalt der Judge-Methode der Klasse study.javassist.Judge so umgeschrieben, dass er immer wahr ist.
javassist, ich habe es irgendwie vermieden, aber kann es verwendet werden, wenn es um den grundlegenden Teil des Systems geht? Wenn ich das nächste Mal eine Chance habe, werde ich darüber nachdenken.
Recommended Posts