9

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

4

2 回答 2

25

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

以下是 Oracle 文档中的解释

许多 Collection 实现(包括 JDK 提供的所有实现)都会有一个公共的 clone 方法,但是要求所有 Collections 都需要它是错误的。例如,克隆由 TB 级 SQL 数据库支持的 Collection 意味着什么?方法调用是否应该导致公司申请一个新的磁盘场?类似的论点也适用于可序列化。

如果客户端不知道 Collection 的实际类型,让客户端决定所需的 Collection 类型,创建一个该类型的空 Collection,并使用 addAll 方法复制将原始集合的元素放入新的集合中。

于 2012-05-05T17:06:57.187 回答
8

因为如果是这样,那将要求所有Collection实现都是Cloneableand Serializable,这比需要的限制更大。实现通常也实现这些接口,但接口并不Collection需要它。

于 2012-05-05T17:06:17.957 回答