所以对于这个项目,我试图在运行时扩展一个类。我想知道的是,这甚至可能吗?如果是这样,我会怎么做?这些东西有图书馆吗?
问问题
2603 次
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
具有所需逻辑的有用方法拦截器替换回调。
于 2013-10-07T20:22:32.703 回答
0
答案取决于您对“扩展课程”的含义。在 java 中,“扩展”意味着声明另一个扩展第一个类(是子类)的类。因此,如果您想创建给定类的子类,这是可能的 - 只需准备一个表示子类的字节数组并将其传递给类加载器。
如果要向现有类添加字段或方法,则只能在加载此类时进行,并且可以通过替换字节数组表示来完成。如果类已经加载,你不能以任何方式修改它。
于 2013-10-08T08:33:03.110 回答