在Java中,是否有可能以编程方式在运行时覆盖类的方法(甚至创建新方法)?
我希望能够做到这一点,即使我在编译时不知道这些类。
我所指的在运行时覆盖是指:
abstract class MyClass{
public void myMethod();
}
class Overrider extends MyClass{
@Override
public void myMethod(){}
}
class Injector{
public static void myMethod(){ // STATIC !!!
// do actual stuff
}
}
// some magic code goes here
Overrider altered = doMagic(
MyClass.class, Overrider.class, Injector.class);
现在,这个调用...
altered.myMethod();
为了避免访问本地字段,Injector.myMethod()会被调用而不是Overrider.myMethod()。
由于进行了“魔法”操作,Injector.myMethod()是静态的,因为它是从不同的类实例(即Overrider)中调用的。