Java:静态瞬态字段

Posted

技术标签:

【中文标题】Java:静态瞬态字段【英文标题】:Java: Static transient fields 【发布时间】:2011-06-01 17:27:18 【问题描述】:

我刚刚发现在 Java 中可以声明一个字段“静态瞬态”——编译器不会抱怨。这似乎没有任何用处,因为我们都知道静态字段没有序列化。

但我想知道,“静态瞬态”字段是否真的有用?

【问题讨论】:

静态瞬态场可以通过反射检测。您可以编写自己的序列化程序来处理 XML、JSon 等,如果您还打算保存静态变量,则可以赋予它特殊含义。 +1 用于获取用例。我的理解是它是多余的。 顺便说一句:您可以使用其他修饰符组合,它们不像抽象类上的公共构造函数或最终类的受保护构造函数/方法那样有意义。 通过反射,任何修饰符组合都可能有意义(或多或少);-) @Peter Lawrey:我建议您将上述回复作为单独的答案重新发布,以便我将其标记为已接受。 【参考方案1】:

不 - 你自己说过,静态字段没有序列化。

编译器允许你这样做有点奇怪。

【讨论】:

它们没有被内置的 Java 序列化器序列化。然而,其他序列化程序的行为可能有所不同。 即使使用另一个序列化程序,保存静态字段的重点是......? @Peter,顺便说一下,serialVersionUID 是个例外。 @UstamanSangat 或者可以放弃“非 ObjectO”范式,对标准序列化行为感到满意..【参考方案2】:

在大多数情况下,它没有用。静态字段确实没有被默认序列化器序列化。

但是,static transient 字段可以通过反射检测。如果有人编写了自己的序列化程序并且他还想序列化静态字段,那么他可能考虑transient 关键字并跳过该特定字段的序列化。

PS:这个答案是为了完整起见而发布的,并且基于Peter Lawrey's comment。归功于他。

【讨论】:

以上是关于Java:静态瞬态字段的主要内容,如果未能解决你的问题,请参考以下文章

为啥Java有瞬态字段?

如何确定 Java 字段是不是具有瞬态修饰符?

加载 POJO 父项时初始化 Java OOP 瞬态字段

Java静态序列化规则?

使用 Gson 序列化具有瞬态字段的对象

我应该在 Java EE 中将注入的变量声明为瞬态吗?