为什么Collection不扩展Cloneable和Serializable?

时间:2012-05-05 16:59:23

标签: java collections

在Java库中,Collection接口不扩展CloneableSerializable接口的原因是什么?

2 个答案:

答案 0 :(得分:19)

Collection是一个接口,用于指定一组称为元素的对象。如何维护元素组的细节取决于Collection的具体实现。例如,某些Collection实现(如List)允许重复元素,而其他实现(如Set则不允许。很多Collection实现都有一个公共clone方法。但是,将它包含在Collection的所有实现中并不合理。这是因为Collection是一个抽象表示。重要的是实施。在处理实际实现时,克隆或序列化的语义和含义发挥作用;也就是说,具体的实现应该决定它应该如何被克隆或序列化,甚至如果它可以被克隆或序列化。在某些情况下,根据实际的后备实现,克隆和序列化可能没有多大意义。因此,在所有实现中强制克隆和序列化实际上不那么灵活且限制性更强。具体实施应该决定是否可以克隆或序列化。

以下是Oracle文档中的explanation

  

许多集合实现(包括由...提供的所有集合)   JDK)将有一个公共克隆方法,但它将是错误的   要求所有收藏品。例如,克隆是什么意思   一个由TB级SQL数据库支持的集合?应该的   方法调用导致公司申请新的磁盘场?类似   参数持有可序列化。

     

如果客户端不知道Collection的实际类型,那就太多了   更灵活,更不容易出错,让客户决定使用哪种类型   需要Collection,创建一个这种类型的空集合,和   使用addAll方法复制原始集合的元素   进入新的。

答案 1 :(得分:8)

因为如果确实如此,那么所有Collection实施都需要CloneableSerializable,这比实际情况更具限制性。 实现经常也会实现这些接口,但Collection接口不需要它。