可以使用反射获得类中的瞬态字段吗
Posted
技术标签:
【中文标题】可以使用反射获得类中的瞬态字段吗【英文标题】:Can a transient field in a class be obtained using reflection 【发布时间】:2011-01-16 10:29:11 【问题描述】:可以使用反射获得类中的transient
字段吗? (使用getDeclaredField(..)
)
【问题讨论】:
您找到解决方法了吗? 【参考方案1】:是的,这是一个正常的字段。您可以通过以下方式检查它是否是瞬态的:
Modifier.isTransient(field.getModifiers());
瞬态: Java 编程语言中的一个关键字,表示字段不是对象的序列化形式的一部分。当一个对象被序列化时,它的瞬态字段的值不包括在序列表示中,而它的非瞬态字段的值被包括在内。
所以没有逻辑理由不能通过反射访问它。被忽略的是字段的值(有时),而不是字段本身。
(顺便说一句,是什么阻碍了您尝试致电getDeclaredField("yourTransientField")
?)
【讨论】:
【参考方案2】:transient
表示该字段不会被序列化。该字段仍由类声明,因此对于反射来说是公平的游戏。
【讨论】:
【参考方案3】:在所有需要序列化的对象中,有一些不需要序列化。这就是为什么这个对象用关键字transient标记的原因。
【讨论】:
【参考方案4】:transient
字段与反射无关。该关键字仅表示应在Java serialization 过程中跳过字段。所以反射可以像访问任何其他字段一样访问transient
字段。
【讨论】:
以上是关于可以使用反射获得类中的瞬态字段吗的主要内容,如果未能解决你的问题,请参考以下文章