【发布时间】:2026-01-01 16:40:01
【问题描述】:
在纯 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() 是 static,因为,在做了“魔术”之后 它是从不同的类实例调用的(它是 Overrider), (所以我们阻止它访问本地字段)。
【问题讨论】:
-
你能告诉我们你想要覆盖什么样的对象吗?乍一看,您的问题让我想起了依赖注入范式的目标。
标签: java reflection code-generation runtime