可序列化和瞬态

and*_*rii 10 java serializable

要使类可序列化,我们执行以下操作:

class A implements Serializable {
    transient Object a;
}
Run Code Online (Sandbox Code Playgroud)

而不是这个:

serializable class A {
   transient Object a;
}
Run Code Online (Sandbox Code Playgroud)

为什么,如果我们想使类可序列化,我们是否实现了一个特殊的接口.如果我们想要排除某些字段,我们会使用关键字 transient?为什么两种情况下都没有使用特殊关键字?我的意思是有什么理由以不同的方式做同样的事情吗?我知道,没有这样的关键字,serializable但为什么不引入它而不是特殊的界面Serializable

Mic*_*rdt 27

为什么没有使用一些特殊的关键字将类标记为可序列化?Serializable接口在代码中看起来像一个神奇的数字,而不像语言功能.

我认为你必须以另一种方式来看待它:语言关键字的存在主要是为了支持编译时语言结构.序列化是一种运行时机制.此外,您不希望为所有内容添加额外的关键字,因为您无法将其用作标识符.另一方面,标记界面的侵入性要小得多.

问题是:为什么我们需要一个语言关键字来标记瞬态字段?答案是当时没有其他方法可以标记特定字段.

如今,在这两种情况下都会为此目的使用注释(以及其他类似于obscure strictfp关键字的东西).