繁体   English   中英

为什么ObjectOutputStream.writeObject不采用Serializable?

[英]Why does ObjectOutputStream.writeObject not take a Serializable?

为什么ObjectOutputStream.writeObject(Object o)不采用Serializable 为什么要带Object

这是因为ObjectOutputStream writeObject覆盖 ObjectOutput接口中 的方法该方法不需要对象可Serializable

ObjectOutput接口指定允许将对象写入流或基础存储的方法,但这可以通过序列化以外的其他过程来实现。 ObjectOutputStream实现此功能,但需要可序列化的对象。 但是,它不能修改其实现的接口的签名。

它应该是ObjectOutputStream.writeObject(serializable)而不是ObjectOutputStream. writeObject(Object) ObjectOutputStream. writeObject(Object) 这是一个适当的用例,应该使用诸如Serializable类的标记接口,但不幸的是没有使用。 如果该对象未实现Serializable接口,那么这将使编译时类型检查的真正好处成为可能,而不是在运行时失败。

我想借此机会提及Joshua Bloch在他的书《 有效的Java》中提到的内容:

标记接口是一个不包含任何方法声明的接口,而仅指定(或“标记”)一个实现该接口具有某些属性的类。 例如,考虑Serializable接口。 通过实现此接口,类指示可以将其实例写入ObjectOutputStream (或“序列化”)。

对于Serializable标记接口,如果ObjectOutputStream.write(Object)方法的参数未实现该接口,则该方法将失败。 莫名其妙的是, ObjectOutputStream API的作者在声明write方法时没有利用Serializable接口。 该方法的参数类型应该是可Serializable而不是Object 就目前而言,尝试在未实现Serializable的对象上调用ObjectOutputStream.write只会在运行时失败,但这不是必须的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM