在运行时更改java类

时间:2011-05-01 12:01:09

标签: java reflection runtime

这是我的问题。假设有两个类,

Class A --> in package PA
Class B --> in package PB

在编译时,我定义了A类和B类。

现在,无论我在编译时在B类中定义了什么,我想在运行时将其更改为与A类相同。我的意思是在运行时加载B类时,我想删除所有已定义的属性,方法。然后将A类中定义的所有内容添加到B类。

所以B类就像A类的虚拟副本。在运行时,B类与A类相同,只是它们在不同的包中。

这可能吗?如何?

1 个答案:

答案 0 :(得分:0)

我认为你不能修改加载的类。你可以代理它,从而改变行为,但它不会修改加载的类,你应该让你的实现注入正确的位置。

这是设置器有时/通常比在代码中调用new更好的原因之一;它将提供注入模拟对象(或代理)的能力,而不是运行时实现。

我很高兴不可能(或者不应该没有对JVM进行修改),因为这将是一个巨大的安全漏洞。

通过使用特制的类加载器可以实现类似的效果,该类加载器可识别所请求的类并返回不同的类。虽然这是一个等待发生的事故。