这是我的问题。假设有两个类,
Class A --> in package PA
Class B --> in package PB
在编译时,我定义了A类和B类。
现在,无论我在编译时在B类中定义了什么,我想在运行时将其更改为与A类相同。我的意思是在运行时加载B类时,我想删除所有已定义的属性,方法。然后将A类中定义的所有内容添加到B类。
所以B类就像A类的虚拟副本。在运行时,B类与A类相同,只是它们在不同的包中。
这可能吗?如何?
答案 0 :(得分:0)
我认为你不能修改加载的类。你可以代理它,从而改变行为,但它不会修改加载的类,你应该让你的实现注入正确的位置。
这是设置器有时/通常比在代码中调用new
更好的原因之一;它将提供注入模拟对象(或代理)的能力,而不是运行时实现。
我很高兴不可能(或者不应该没有对JVM进行修改),因为这将是一个巨大的安全漏洞。
通过使用特制的类加载器可以实现类似的效果,该类加载器可识别所请求的类并返回不同的类。虽然这是一个等待发生的事故。