Je veux afficher vrai même en Java avec un == 1 && a == 2 && a == 3.
Puisqu'il s'agit de Java (?), La partie de jugement if est extraite dans une autre classe. Puisqu'il ne réécrit pas la valeur de l'argument, faites-en une méthode statique.
package study.javassist;
public class Judge {
public static boolean judge(int a) {
if (a == 1 && a == 2 && a == 3) {
return true;
} else {
return false;
}
}
}
La classe principale qui appelle la classe ci-dessus est la suivante.
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
Dans la méthode execute (), le contenu de traitement de la méthode juge de la classe study.javassist.Judge est réécrit pour qu'il soit toujours vrai.
javassist, je l'ai évité d'une manière ou d'une autre, mais peut-il être utilisé pour traiter la partie de base du système? La prochaine fois que j'aurai une chance, je l'examinerai.
Recommended Posts