我试图理解一个java程序,它有一个代码段,如
for (final Document document : cluster.getDocuments()) {
if (documentsShown >= maxNumberOfDocumentsToShow) {
break;
}
displayDocument(level + 1, document);
documentsShown++;
}
这是否意味着cluster.getDocuments()
必须是迭代器对象?
答案 0 :(得分:7)
它必须是可迭代的对象(即集合或数组)。基本上,
它通常用于迭代 数组或集合类(例如, 数组列表)。它也可以迭代 任何实现的东西 可迭代接口(必须定义 iterator()方法)。很多人 集合类(例如,ArrayList) 实现Iterable,这使得 for-each循环非常有用。您可以 也为你实现Iterable 自己的数据结构。
答案 1 :(得分:3)
您迭代的集合必须实现Iterable<E>
接口,以便代码在内部编译成
Iterator<Document> iterator = cluster.getDocuments().iterator();
while (iterator.hasNext()) {
// iteration
}
当然,这意味着如果您提供Iterable
接口,则可以为自定义对象提供自定义迭代。
答案 2 :(得分:1)
不一定是迭代器对象,但它需要能够迭代(数组,列表,集等等)。
答案 3 :(得分:1)
不,java的优点在于它的所有集合都实现了Collection interface,因此for-each构造适用于集合。 Cluster.getDocuments()
很可能是某种集合。
要使用for-each构造,尽管对象只需要实现Iterable interface,其中Collection是子类。