Ответ: Java.Help
Манипуляции с байт-кодом делать можно, причём всякие и разные
Вот попробовал влить метод в байт код :
Код:
public class Calc {
public int add(int x,int y)
{
return x+y;
}
}
Компилим : javac Calc.java
Код:
import javassist.ClassPool;
import javassist.CtClass;
import javassist.CtMethod;
public class Magic {
public static void main(String args[]) throws Exception
{
ClassPool pool = ClassPool.getDefault();
CtClass cc = pool.get("Calc");
CtMethod method = CtMethod.make("public int sub(int x, int y){return x-y;}", cc);
cc.addMethod(method);
cc.writeFile();
}
}
Компиляем и запускаем :
javac -classpath .;javassist.jar Magic.java
java -classpath .;javassist.jar Magic
Дальше, тестим магию :
Код:
public class Main {
public static void main(String[] args) {
Calc calc = new Calc();
[COLOR="Red"] int result = calc.sub(10,15);
[/COLOR] System.out.println(result);
result = calc.add(10,15);
System.out.println(result);
}
}
Легко заметить, что метода sub(int,int) в исходном классе небыло. Магия изменила байт-код, вот так