为什么 ObjectOutputStream.writeObject 不采用可序列化?
为什么 < code>ObjectOutputStream.writeObject(Object o) 不采取 可序列化
?为什么它需要一个对象
?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
为什么 < code>ObjectOutputStream.writeObject(Object o) 不采取 可序列化
?为什么它需要一个对象
?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(2)
这是因为
ObjectOutputStream
中的writeObject
覆盖了ObjectOutput
接口,它不要求对象可序列化
。ObjectOutput
接口指定允许将对象写入流或底层存储的方法,但这可以通过序列化以外的过程来实现。ObjectOutputStream
实现此功能,但需要可序列化的对象。但是,它无法修改其实现的接口的签名。This is because
writeObject
inObjectOutputStream
overrides the method in theObjectOutput
interface which does not require that the object beSerializable
.The
ObjectOutput
interface specifies methods that allow objects to be written to a stream or underlying storage, but this may be achieved by a process other than serialization. TheObjectOutputStream
implements this functionality, but requires serializable objects. However, it cannot modify the signature of the interface that it implements.它应该是
ObjectOutputStream.writeObject(serialized)
而不是ObjectOutputStream。 writeObject(对象)
。这是一个正确的用例,应该使用像Serialized
这样的标记接口,但不幸的是没有。这将使编译时类型检查的真正好处成为可能,而不是在对象未实现 Serialized 接口时在运行时失败。我想借此机会提一下 Joshua Bloch 在他的书中提到的内容 有效的java:
It should be
ObjectOutputStream.writeObject(serializable)
rather thanObjectOutputStream. writeObject(Object)
. It is a proper use case where a marker interface likeSerializable
should have been used but unfortunately not. This would have made it possible the very real benefit of compile-time type checking instead of failing at runtime if the object does not implementSerializable
interface.I would like to take this opportunity to mention what Joshua Bloch has mentioned in his book Effective java: