可以使用反射获取类中的transient
字段吗? (使用getDeclaredField(..)
)
答案 0 :(得分:24)
是,这是一个正常的字段。您可以通过以下方式检查它是否是瞬态的:
Modifier.isTransient(field.getModifiers());
<强>瞬态强>: Java编程语言中的关键字,指示字段不是对象的序列化形式的一部分。当对象被序列化时,其瞬态字段的值不包括在串行表示中,而其非瞬态字段的值包括在内。
所以没有逻辑上的理由让它不能通过反思来访问。它是被忽略的字段的值(有时),而不是字段本身。
(顺便说一句,是什么阻碍了你只是试着打电话给getDeclaredField("yourTransientField")
?)
答案 1 :(得分:3)
transient
表示该字段不会被序列化。这个领域仍然是由班级宣布的,所以这是公平的反思。
答案 2 :(得分:2)
在所有需要序列化的对象中,有一些不需要序列化。这就是为什么这个对象用关键字transient标记的原因。
答案 3 :(得分:0)
transient
字段与反射无关。关键字仅表示在Java serialization进程中应跳过字段。因此,反射可以像访问任何其他字段一样访问transient
字段。