15

当接口 java.util.Collection 已经扩展了定义了这个方法的 java.util.Iterable 时,为什么还要在接口 java.util.Collection 上定义方法 iterator() 。

我正在考虑某种向后兼容性,或者有机会在集合级别的方法上编写一些 JavaDoc。

还有其他想法吗?

4

4 回答 4

9

向后兼容性。Iterable 直到 1.5 才通过 for(Object o : iterable) 构造引入。以前,所有集合都必须提供一种迭代它们的方法。

于 2010-01-18T14:11:31.290 回答
6

我怀疑这只是为了避免从文档的角度删除方法的出现。尽管 javadoc 很好,但很难注意到/欣赏从一个接口移动到超级接口的方法。

请注意,同样在 1.5 中引入的 Closeable 也是如此。

据我所知,从 Collection 类中删除该方法不会出现二进制兼容性问题。

于 2010-01-18T14:11:57.073 回答
3

我对此进行了更多调查,发现 equals() 和 hashcode() 方法也被覆盖了。

显然,这样做的唯一原因可能是添加 javadoc - 也许这就是 iterator() 也被覆盖的原因。

于 2010-01-18T16:55:59.103 回答
3

可迭代是在 1.5 中引入的。由于它是 1.5 之前的 Collection 的一部分,因此他们可能只是没有将其删除。正如另一位贡献者所指出的,它确实有更好的 JavaDoc。

于 2010-01-18T14:14:01.923 回答