类中的瞬态字段可以使用反射获取吗
可以使用反射获取类中的瞬态字段吗? (使用 getDeclaredField(..) )
Can a transient
field in a class be obtained using reflection? (using getDeclaredField(..)
)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
transient
表示该字段不会被序列化。该字段仍然由类声明,因此反思是公平的。transient
indicates that the field will not be serialized. The field is still declared by the class, so it is fair game for reflection.在所有需要序列化的对象中,都有一些不需要序列化的对象。这就是为什么这个对象被标记为关键字瞬态。
Among all the objects that needs to be serialized there are those one that need not to be serialized. That's why this objects are marked with the keyword transient.
transient
字段与反射无关。该关键字仅表示在 Java 序列化过程中应跳过某个字段。因此反射可以像访问任何其他字段一样访问瞬态字段。transient
fields have nothing to do with reflection. The keyword only signals that a field should be skipped during Java serialization process. So reflection can accesstransient
fields just like any other fields.是的,这是一个正常的字段。您可以通过以下方式检查它是否是瞬态的:
因此,没有逻辑上的理由不能通过反射来访问它。 (有时)被忽略的是字段的值,而不是字段本身。
(顺便说一句,是什么阻碍了您尝试调用 getDeclaredField("yourTransientField")?)
Yes, It is a normal field. You can check whether it is transient by:
So no logical reason for it not to be accessible by reflection. It's the value of the field that is ignored (sometimes), not the field itself.
(btw, what hindered you from just trying to call
getDeclaredField("yourTransientField")
?)