【发布时间】:2009-05-03 05:05:47
【问题描述】:
在 Java 中,AbstractCollection 类中的 containsAll 和 retainAll 明确声明不尊重基数,因此换句话说,每边有多少个值实例并不重要。由于标准库中的所有 Java 集合都扩展了 AbstractCollection,因此假设它们都以相同的方式工作。
但是,Collection 接口中这些方法的文档并没有说明什么。是应该从 AbstractCollection 推断,还是故意未指定以允许定义不同工作方式的集合?
例如,apache-collections 中的 Bag 明确声明它确实尊重基数,并声称它违反了 Collection 版本的合同(尽管它实际上并非如此)。
那么,这些操作在 Collection 中而不是在 AbstractCollection 中的语义是什么?
编辑:那些想知道我为什么会关心的人,那是因为作为我博士学位的一部分。工作我证明了开发人员并不期望在 Apache 中出现一致性违规,但我试图理解为什么 Collection 接口如此模棱两可。
【问题讨论】:
标签: java collections