可以使用反射获得类中的瞬态场

时间:2010-02-13 06:41:58

标签: java reflection transient

可以使用反射获取类中的transient字段吗? (使用getDeclaredField(..)

4 个答案:

答案 0 :(得分:24)

,这是一个正常的字段。您可以通过以下方式检查它是否是瞬态的:

Modifier.isTransient(field.getModifiers());
  

<强>瞬态:       Java编程语言中的关键字,指示字段不是对象的序列化形式的一部分。当对象被序列化时,其瞬态字段的值不包括在串行表示中,而其非瞬态字段的值包括在内。

所以没有逻辑上的理由让它不能通过反思来访问。它是被忽略的字段的值(有时),而不是字段本身。

(顺便说一句,是什么阻碍了你只是试着打电话给getDeclaredField("yourTransientField")?)

答案 1 :(得分:3)

transient表示该字段不会被序列化。这个领域仍然是由班级宣布的,所以这是公平的反思。

答案 2 :(得分:2)

在所有需要序列化的对象中,有一些不需要序列化。这就是为什么这个对象用关键字transient标记的原因。

答案 3 :(得分:0)

transient字段与反射无关。关键字仅表示在Java serialization进程中应跳过字段。因此,反射可以像访问任何其他字段一样访问transient字段。