相关疑难解决方法(0)

Java反射:如何在运行时覆盖或生成方法?

在普通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);
Run Code Online (Sandbox Code Playgroud)

现在,这个调用......

altered.myMethod();
Run Code Online (Sandbox Code Playgroud)

...将调用Injector.myMethod()而不是Overrider.myMethod().

Injector.myMethod()是静态的,因为在执行"magic"之后,它会从不同的类实例(它是Overrider)调用,(因此我们阻止它访问本地字段).

java reflection code-generation runtime

25
推荐指数
4
解决办法
3万
查看次数

标签 统计

code-generation ×1

java ×1

reflection ×1

runtime ×1