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