使用反射(使用getDeclaredField(..)
),能否获取类中的transient
字段?
使用反射(使用getDeclaredField(..)
),能否获取类中的transient
字段?
是的,它是一个普通字段。您可以通过以下方式检查是否为瞬态:
Modifier.isTransient(field.getModifiers());
transient: Java编程语言中的一个关键字,表示一个字段不是对象序列化形式的一部分。当一个对象被序列化时,它的瞬态字段的值不会被包括在序列化的表示中,而它的非瞬态字段的值会被包括在其中。
所以没有逻辑原因阻止通过反射访问它。忽略的是该字段的值(有时),而非字段本身。
(顺便问一句,为什么不试试调用getDeclaredField("yourTransientField")
呢?)
transient
表示该字段不会被序列化。但该字段在类中仍然存在,因此可以通过反射进行访问。
在需要序列化的所有对象中,有些对象不需要被序列化。因此,这些对象会被标记为关键字“transient”。