【问题标题】:Serialization, compile time check Vs runtime check序列化,编译时检查与运行时检查
【发布时间】:2021-11-05 05:18:14
【问题描述】:

在了解 Java 中如何使用标记接口时,我从 ObjectOutputStream 类中找到了 writeObject 方法。它接收 Object 的实例作为输入,并且仅当给定的参数是 Serializable 的实例时才进行序列化。

为什么 writeObject 方法不接收 Serializable 实例作为输入而不是 Object,以便在编译时完成类型检查?将参数类型设置为 Object 并针对 Serializable 执行 instanceOf 检查的原因是什么?

【问题讨论】:

    标签: java serializable marker-interfaces


    【解决方案1】:

    为了使序列化工作,Object 需要是 Serializable 的实例。但是,对于编写对象,您可能会从 jdk 源代码中看到,writeObject 中调用了 Object 类的方法。一个简单的例如是obj.getClass()

    因此,如果writeObject 方法将Serializable 作为输入,最终对于像obj.getClass() 这样的引用方法,无论如何它都必须转换为Object

    【讨论】:

      猜你喜欢
      • 2020-01-07
      • 2011-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-03
      • 2017-06-26
      • 1970-01-01
      相关资源
      最近更新 更多