一个类中的瞬态字段能否使用反射获取?

11

使用反射(使用getDeclaredField(..)),能否获取类中的transient字段?


你找到任何解决方法了吗? - MaNn
4个回答

27

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

Modifier.isTransient(field.getModifiers());

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

所以没有逻辑原因阻止通过反射访问它。忽略的是该字段的值(有时),而非字段本身。

(顺便问一句,为什么不试试调用getDeclaredField("yourTransientField")呢?)


3

transient表示该字段不会被序列化。但该字段在类中仍然存在,因此可以通过反射进行访问。


2

在需要序列化的所有对象中,有些对象不需要被序列化。因此,这些对象会被标记为关键字“transient”。


0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接