And*_*dyT 17
这是因为,writeObject在ObjectOutputStream覆盖该方法中的ObjectOutput接口,它不需要该对象是Serializable.
的ObjectOutput接口指定了允许对象被写入到一个流或底层存储方法,但是这可通过比序列以外的处理来实现.在ObjectOutputStream实现了这个功能,但需要序列化的对象.但是,它无法修改它实现的接口的签名.
应该是ObjectOutputStream.writeObject(serializable)而不是ObjectOutputStream. writeObject(Object)。Serializable这是一个正确的用例,应该使用类似的标记接口,但不幸的是没有。如果对象没有实现接口,这将使编译时类型检查的真正好处成为可能,而不是在运行时失败Serializable。
我想借此机会提一下Joshua Bloch在他的 《Effective java》一书中提到的内容:
\n\n\n\n标记接口是不包含方法声明的接口,而仅指定(或 xe2x80x9cmarksxe2x80x9d)实现具有某些属性的接口的类。例如,考虑可序列化接口。通过实现此接口,a\n 类指示其实例可以写入\n
\n\nObjectOutputStream(或\xe2\x80\x9cserialized\xe2\x80\x9d)。对于
\nSerializable标记接口,ObjectOutputStream.write(Object)如果其参数未实现该接口,则该方法将失败。令人费解的是,\n API 的作者 在声明 write 方法时ObjectOutputStream没有利用\n 接口。Serializable方法\xe2\x80\x99s 参数类型\n 应该是Serializable而不是Object。就目前情况而言,尝试调用ObjectOutputStream.write未实现的对象Serializable只会在运行时失败,但事实并非如此。
| 归档时间: |
|
| 查看次数: |
3544 次 |
| 最近记录: |