java - 为什么 scala.Serializable 不指定任何方法?

标签 java scala serialization interface language-design

因为 Java 语言要求所有接口(interface)成员都是公开的,而最初的设计者不想强制 java.io.Serializable 的“方法”公开,所以这在 java 。

Scala 没有这个限制,但是像 readObject/writeObject 这样的东西仍然没有在 scala.Serializable trait 中指定。

这不会对开发人员有所帮助吗,因为

  • 他们保证他们的签名是正确的
  • 这将使访问这些方法变得不那么尴尬。

还是我错过了一些重要的事情?

最佳答案

or do I miss something important?

是的,你有。

readObject/writeObject 方法必须是私有(private)的并且不能被重写以使机制正常工作。

它们也以相反的方式被调用(即父类(super class)->类)。此外,您确实希望该方法保持私有(private)以防止滥用(和显式调用)

Serializable 机制还提供了其他方法:像 writeReplace+readResolve,通常不会在同一个类中使用 + readObjectNoData(这不是很有用)。

现在,如果您需要特定方法,请查看 java.io.Externalizable。它确实发布了它的方法,并且实现它会覆盖默认的序列化机制。

关于java - 为什么 scala.Serializable 不指定任何方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6318562/

相关文章:

java - 在 Hibernate 中保存实体后更新 OneToMany 列表

scala - Spark数据帧中两行之间的差异

scala - 匿名函数作为参数

java - 将java类字段直接转换为字节数组

c# - 在反序列化期间忽略目标模型类中不存在的 JSON 枚举值

java - 如何在 Android 上将相机方向锁定为纵向

java - 这个程序如何在不知道数据类型的情况下接受数据?

scala - 使用 Scala 的 Play 2.x 应用程序中的 Spring Data Neo4j

java - 用于泛型类型的 Jackson 反序列化器

java - 为什么我要在 java 中使用静态初始化 block ?