10

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

4

4 回答 4

26

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

Modifier.isTransient(field.getModifiers());

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

因此,没有任何逻辑理由不能通过反射访问它。(有时)被忽略的是字段的值,而不是字段本身。

(顺便说一句,是什么阻碍了您尝试打电话getDeclaredField("yourTransientField")?)

于 2010-02-13T06:45:16.480 回答
3

transient表示该字段不会被序列化。该字段仍然由类声明,因此它是反射的公平游戏。

于 2010-02-13T06:49:11.663 回答
2

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

于 2011-12-15T10:09:46.710 回答
0

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

于 2012-11-04T10:01:56.783 回答