Java 反射:如何在运行时覆盖或生成方法? [英] Java reflection: How do I override or generate methods at runtime?

查看:19
本文介绍了Java 反射:如何在运行时覆盖或生成方法?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

可以在纯 Java 中覆盖类的方法在运行时以编程方式(甚至创建新方法)?

It is possible in plain Java to override a method of a class programmatically at runtime (or even create a new method)?

即使我在编译时知道这些类,我也希望能够做到这一点.

I want to be able to do this even if I don't know the classes at compile time.

在运行时覆盖是什么意思:

What I mean exactly by overriding at runtime:

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().

...would call Injector.myMethod() instead of Overrider.myMethod().

Injector.myMethod() 是静态,因为在做了魔术"之后它是从不同的类实例调用的(它是覆盖程序),(所以我们阻止它访问本地字段).

Injector.myMethod() is static, because, after doing "magic" it is invoked from different class instance (it's the Overrider), (so we prevent it from accessing local fields).

推荐答案

你可以使用类似 cglib 的东西即时生成代码

You can use something like cglib for generating code on-the-fly

这篇关于Java 反射:如何在运行时覆盖或生成方法?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆