在运行时修改类中的字段 - java

时间:2017-04-08 00:05:07

标签: java class dynamic reflection

我的问题是,是否可以将属性甚至方法注入已经“classloaded”的类中。我已经注意到,在java中,动态添加属性并不是很简单,每个人都说你应该使用Map(add property for a object dynamicly)。

在运行时更改类是否有更好,更“干净”的方法。我读了一些关于ASM的内容,但我不知道ASM使用的访问者模式是否是最佳的工作方式。

如果ASM是解决此问题的最佳方法,那么ASM网站(http://download.forge.objectweb.org/asm/asm4-guide.pdf)上提供的文档旁边是否有任何文档

1 个答案:

答案 0 :(得分:2)

一旦JVM加载了类,就无法对其进行修改。

您最好的选择是修改课程,然后在另一个类加载器中加载新副本。您最终会得到两个版本的类(具有不同的运行时类型!)。该类的第一个版本的任何实例都不会有新的字段,方法等。

我的建议......不要这样做。想想另一种方法来实现你在这里尝试做的事情。或者,如果动态修改类是您的应用程序的基础,请考虑使用更动态的语言。