【发布时间】:2011-03-24 00:04:17
【问题描述】:
是否有一种简单的方法可以通过反射在 Java 中指定字段是否应该是瞬态的,类似于如何使用 setAccessible() 设置字段的可访问性标志?
【问题讨论】:
标签: java reflection transient
是否有一种简单的方法可以通过反射在 Java 中指定字段是否应该是瞬态的,类似于如何使用 setAccessible() 设置字段的可访问性标志?
【问题讨论】:
标签: java reflection transient
反射本身不能改变代码。
Java 代理应该允许您在加载类时重写它。
如果serialPersistentFields 存在(不太可能),您可以在序列化机制缓存类数据之前使用反射来更改它。您可以以高度特定于版本的方式使用反射来更改序列化机制中的数据。
【讨论】:
我在 Java API 中看不到任何直接的方法来执行此操作,但可以使用 JRebel 或 LiveRebel http://www.zeroturnaround.com/jrebel/comparison/ 之类的方法。您可以使用 http://asm.ow2.org/ 中的 ASM 之类的东西在相关字段上使用瞬态修饰符重写字节码。然后触发 JRebel/LiveRebel 替换类的运行时版本。
我没有尝试使用 ASM 自动执行此操作,但我已使用 JRebel 和 IntelliJ IDEA 在交互式开发期间成功执行此类更改。
【讨论】: