黑马程序员技术交流社区

标题: 为什么不让所有的类都实现Serializable接口 [打印本页]

作者: 王光保    时间: 2011-7-18 09:46
标题: 为什么不让所有的类都实现Serializable接口
一个类如果实现了Serializable接口以后可以直接序列化,而且此接口没有任何方法,也不会让实现类增加不必要的操作,那么所有的类都实现该接口不更好吗?这样也为类增加了一个功能。
作者: 匿名    时间: 2011-7-18 10:01
实现serializable接口的作用是就是可以把对象存到字节流,然后可以恢复!
所以你想如果你的对象没实现序列化怎么才能进行网络传输呢,要网络传输就得转为字节流,所以在分布式应用中,你就得实现序列化,如果你不需要分布式应用,那就没那个必要实现序列化.
作者: 崔虎    时间: 2011-7-19 17:16
从表面上来看,如果我们让我们的每一个类都实现serializable接口,使它们都可以进行序列化,(即使我们并不一定真的需要对某些类序列化),但能使这些类的功能更强,不是更好吗?
其实不然,虽然当前的serializable接口里面没有任何方法,但是JDK的版本在不断的更新,谁也不能保证以后会不会有方法定义,假设一旦出现了方法,则咱们必须为所有的类重写这个方法。那么这样的代价是很大的。

改正一下:
虽然说在日后版本jdk中,sun可能在serializable接口中增加方法,但是也不能完全的说,只要类暂时用不到序列化操作,就别去实现serializable接口。   通过serializable接口来扩展一小部分类的功能,还是允许的。但是不要大量使用。(这下够严谨了吧?)
[ 本帖最后由 cxy_zy 于 2011-07-21  12:11 编辑 ]
作者: 匿名    时间: 2011-7-20 18:05
上面两位回答得都很好,我再补充一点。
Serializable接口是没有任何方法,但是也不会让实现类增加不必要的操作的说法是不对的。
首先 ,序列化只用在特殊的场合,一般情况下不需要序列化,没必要Serializable接口。正如楼主所说,实现Serializable接口很容易,那么有需要时才实现Serializable接口,不是也很方便吗?

如果类Serializable接口,那么它的所有子类对象都是可序列化的,而序列化是要消耗资源的。而且如果序列化的类含有另一个可序列化的对象的引用,那么被引用的对象也会序列化!注意序列化是要消耗资源的。

如果序列化类要升级,需要测试兼容性,而测试的工作量是与可序列化的类的数码成正比的。特别是为继承而设计的类,实现Serializable接口更要谨慎,因为父类序列化,子类也可序列化,升级会大大增加测试的工作量。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2