可以使用reflection获得类中的瞬态场
可以使用reflection获得类中的transient
场吗? (使用getDeclaredField(..)
)
是的 ,这是一个正常的领域。 您可以通过以下方式检查它是否是瞬态的
Modifier.isTransient(field.getModifiers());
transient :Java编程语言中的一个关键字,指示字段不是对象序列化forms的一部分。 当对象被序列化时,其瞬态字段的值不包括在串行表示中,而其非瞬态字段的值包括在内。
所以没有合理的理由让它无法通过反思获得。 它是被忽略的字段的值(有时),而不是字段本身。
(顺便说一句,是什么阻碍了你试图调用getDeclaredField("yourTransientField")
?)
transient
表示该字段不会被序列化。 这个领域仍然由class级宣布,所以这是一个公平的反思游戏。
在需要序列化的所有对象中,有一些不需要序列化。 这就是为什么这个对象用关键字transient标记的原因。
transient
场与reflection无关。 关键字仅表示在Java序列化过程中应跳过字段。 因此,reflection可以像任何其他字段一样访问transient
字段。