当前位置: 首页 > 知识库问答 >
问题:

序列化、编译时检查与运行时检查

吕天逸
2023-03-14

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

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

共有1个答案

蒙光华
2023-03-14

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

因此,如果writeObject方法将可串行化作为输入,最终用于引用 ,则必须将其强制转换为 Object

 类似资料:
  • 检查模块提供 inspect() 函数,它提供有关各种SQLAlchemy对象的运行时信息,包括核心和ORM中的这些对象。 这个 inspect() 函数是SQLAlchemy公共API的入口点,用于查看内存中对象的配置和构造。取决于传递给的对象的类型 inspect() 返回值要么是提供已知接口的相关对象,要么在许多情况下返回对象本身。 其基本原理是 inspect() 是双重的。其一是它不再需

  • 我想检查某个程序是否在计算机启动时运行,我为此访问了类: 输出确实是,因为该程序实际上是在windows启动时运行的,但是当我通过禁用该程序启动时(它的状态变为),下次我运行上面的代码时,结果仍然是,尽管该程序不再是启动程序的一部分。 这让我得出了一个简单的结论,当windows任务管理器禁用启动程序时,它不会删除注册表项中的项,而是更改了它的另一个值..但是我无法找到那个更改的值。 我希望有人能

  • 主要内容:实例,实例,实例,实例,实例关键词: setup hold recovery removal width period 指定路径延迟,目的是让仿真的时序更加接近实际数字电路的时序。利用时序约束对数字设计进行时序仿真,检查设计是否存在违反(violation)时序约束的地方,并加以修改,也是数字设计中不可或缺的过程。 Verilog 提供了一些系统任务,用于时序检查。这些系统任务只能在 specify 块中调用。下面就介绍 6

  • 你好,我有一个应用程序,有两个活动:主页面和详细页面。 当有互联网连接时,用户可以从主页面导航到详细信息页面。当没有网络连接时,他不能这样做。 问题是:当我进入详细信息页面并关闭wifi时,我想完成此活动,我如何实现此功能?我在主要活动类中检查过类似这样的内容: 当我启动有互联网或没有互联网的应用程序时,它都可以正常工作,但是当我在运行时关闭wifi时,它不起作用。 无论如何,谢谢你!

  • 我可以使用InteliJ Ultimate的探查器查看执行一个方法需要多长时间吗?

  • Upon each invocation of the PHP application, Smarty tests to see if the current template has changed (different time stamp) since the last time it was compiled. If it has changed, it recompiles that t