Java 反射:如何在运行时重写或生成方法?
2022-09-01 15:53:46
在纯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)调用的(所以我们阻止它访问本地字段)。