soc*_*soc 12 java serialization scala language-design interface
因为Java语言要求所有接口成员都是公共的,并且原始设计者不想强制java.io.Serializable公开"方法" ,所以这在Java中是不可能的.
Scala没有这个限制,但事情好像readObject/ writeObject仍未在指定的scala.Serializable特质.
这不会有助于开发人员,因为
还是我错过了重要的事情?
回答Java背景,但我猜相同的推理适用于Scala:Java不需要标记为Serializable的方法来实现任何方法; 运行时自身提供序列化机制.这就是界面为空的原因.readObject和writeObject不是Serializable的一部分,不是因为它们不是公共的,而是因为从Serializable派生的对象不需要实现它们.
Serializable实际上不应该是一个接口而是一个注释(特别是因为从Serializable类派生的类本身很可能不是 Serializable本身),但它在语言注释之前是语言的一部分.
还是我错过了重要的事情?
是的你是.
readObject/writeObject方法必须是私有的,并且不能被覆盖,以使机制正常工作.
它们也以相反的方式调用(即超类 - >类).你还希望这个方法保持私有,以防止滥用(和显式调用)
Serializable机制也提供了其他方法:例如writeReplace + readResolve,它们通常不在同一个类中使用+ readObjectNoData(这不是那么有用).
现在,如果您需要特定的方法,请查看java.io.Externalizable.它确实发布了它的方法,并且实现它会覆盖默认的序列化机制.