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