在Java库中,Collection接口没有扩展Cloneable和Serializable接口的原因是什么?
发布于 2012-05-06 01:06:57
Collection是一个接口,它指定了一组称为元素的对象。如何维护元素组的细节留给Collection的具体实现。例如,像List这样的一些Collection实现允许重复的元素,而像Set这样的其他实现则不允许。很多Collection实现都有一个公共的clone方法。然而,将它包含在Collection的所有实现中并没有真正的意义。这是因为Collection是一种抽象表示。重要的是实现。在处理实际实现时,克隆或序列化的语义和含义将发挥作用;也就是说,具体的实现应该决定如何克隆或序列化它,或者甚至决定是否可以克隆或序列化它。在某些情况下,根据实际的备份实现,克隆和序列化可能没有多大意义。因此,在所有实现中强制克隆和序列化实际上灵活性较低,限制也更多。具体的实现应该决定它是否可以被克隆或序列化。
以下是甲骨文文档中的explanation:
许多集合实现(包括JDK提供的所有实现)都会有一个公共的克隆方法,但在所有集合中都需要它将是错误的。例如,克隆一个由to级SQL数据库支持的Collection意味着什么?该方法调用是否应导致公司申请新的磁盘场?类似的论据也适用于可序列化。
如果客户端不知道集合的实际类型,让客户端决定所需的集合类型,创建此类型的空集合,并使用addAll方法将原始集合的元素复制到新集合中,这将更加灵活且不易出错。
发布于 2012-05-06 01:06:18
因为如果是这样的话,就需要所有的Collection实现都是Cloneable和Serializable,这比所需的限制更多。实现通常也会实现这些接口,但Collection接口并不需要它。
https://stackoverflow.com/questions/10464026
复制相似问题