在运行时扩展类

5

所以对于这个项目,我正在尝试在运行时扩展一个类。 我想知道的是,这是否可行?如果可以,我该如何做?是否有适用于此类操作的库?


你到底为什么想要这样做?请说明使用情况。我怀疑这是否可能。 - Rohit Jain
3个回答

4

CGLib是您需要的一个库。它在运行时扩展类或实现接口方面非常强大,因此许多流行的框架,如Spring或Hibernate都在使用它。

您可以使用以下代码创建类扩展:

 public Object createProxy(Class targetClass) {
    Enhancer enhancer = new Enhancer();
    enhancer.setSuperclass(targetClass);
    enhancer.setCallback(NoOp.INSTANCE);
    return enhancer.create();
   }

尽管您可能会用具有所需逻辑的有用方法拦截器替换NoOp回调。

1

是的,可以在运行时扩展一个类。尝试使用能够在运行时修改字节码的库,比如 javassist 或者 ASM


0
答案取决于您对“扩展类”的定义。在 Java 中,“扩展”意味着声明另一个继承第一个类的类(即子类)。因此,如果您想创建给定类的子类,这是可能的 - 只需准备一个表示子类的字节数组并将其传递给类加载器即可。
如果要向现有类添加字段或方法,则只能在加载该类时进行,并通过替换字节数组表示来完成。如果类已经加载,则无法以任何方式修改它。

我只是想动态选择要扩展哪个类(因为类路径不断变化)。 - PaulBGD

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接