跳到主要内容

为什么Java集合类没有实现Cloneable和Serializable接口?

参考答案:

1.Cloneable接口作用是将一个对象的属性值复制给另一个对象,而不是对象的一个引用。
2.Serializable接口作用(这个罗嗦一下)

#序列化的用途

1.有时候,如果想让一个对象持久的存储下来(存到磁盘),或者是进行远程的对象调用,那就要使用序列化实现这些作用。我们必须对所有支持持久化存储的类实现Serializable接口,读取的时候也要进行反序列化。
2.对于jvm来说,进行持久化的类必须有个标记,就是实现Serializable接口,关联serialVersionUID,这个变量就是在反序列话中确定用那个类加载这个对象。
3.值得主意的是,持久化的数据都是存在在java堆中,static类型的数据存在在方法区中,不能被持久化。如果不想让某个成员变量持久化,变量前面用transient关键字
4.当然序列化的那个serialVersionUID这个还可以进行自定义

#为什么集合类中不实现上面两个接口呢?
其实不难看出,Cloneable是复制对象的,序列化也是针对对象的操作,集合类只是管理对象的一个工具,就好比说list能够线性的管理对象,set集合能够对对象去重等,这些集合类都是针对与为管理对象而产生的。
其实,着两个接口都是针对真是的对象,而不是集合类这样的管理对象的对象。这个从语义上就是集合类的Cloneable接口和Serializable接口
应该又集合中具体的类型实现,而不是又集合类来实现序列化。
假设集合类实现了这两个接口,如果我要生成一个不需要序列化,不需要clone的集合,那么集合类就强行实现,这样有违集合的设计原则。