繁体   English   中英

为什么迭代器方法同时存在于Iterable和Collection接口中? [重复]

[英]Why is the iterator method present in both Iterable and Collection interfaces? [duplicate]

Iterable接口具有以下方法:

 Iterator<T> iterator();

Collection接口扩展了Iterable ,它也声明了相同的方法。

我怀疑在设计Java集合时需要两次放置相同的方法声明吗?

一个可能的原因可能是添加的javadoc清楚地说明了该方法正在做什么。 对于Collection它是:

/**
 * Returns an iterator over the elements in this collection.  There are no
 * guarantees concerning the order in which the elements are returned
 * (unless this collection is an instance of some class that provides a
 * guarantee).
 *
 * @return an <tt>Iterator</tt> over the elements in this collection
 */

而对于Iterable它“only”是:

/**
 * Returns an iterator over elements of type {@code T}.
 *
 * @return an Iterator.
 */

重新定义接口方法是一种常见的做法,它允许子接口细化超级接口定义的契约。

Iterableiterator()返回某种类型元素的迭代器。

Collectioniterator()返回Collection的元素上的迭代器,而不保证顺序。

Listiterator()以适当的顺序返回List元素的迭代器。

这意味着如果你实现了一些实现Collection类的iterator()方法,你应该遵循Collectioniterator()的契约,它比Iterableiterator()契约更具体。 如果你的类也实现了List ,你应该遵循Listiterator()更具体的契约。

主要原因是Java 5。

java.util.Collection与它的iterator()方法和java.util.Iterator自爪哇1.2存在。

当他们想引入Java 5中增强的for循环(一个for (String s: ...) {}他们需要一种方法来创建一个java.util.Iterator从一个没有实现的类java.util.Collection决定引入一个新的接口java.lang.Iterable ,它可以由所有想要支持增强的for循环的类实现。

为了使现有的java.util.Collection及其所有的后代接口和类与增强的for循环兼容,他们使java.util.Collection扩展了java.lang.Iterable

因此,两个接口都有一个方法iterator() - java.util.Collection因为它是“第一个”, java.lang.Iterable用于支持增强的for循环。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM