【发布时间】:2012-12-08 14:39:00
【问题描述】:
我相信我已经注意到,对于某些 Iterables(例如 IterableString class),要么创建了一个新的迭代器,要么迭代器以某种方式在每个新的 foreach 构造中重新开始,但这似乎不会发生在其他可迭代...
例如,如果您运行以下代码:
import java.util.ArrayList;
public class test {
public static void main(String args[]) {
IterableString x = new IterableString("ONCE");
System.out.println("***");
for (char ch : x){
System.out.println(ch);
}
System.out.println("***");
for (char ch : x){
System.out.println(ch);
}
ArrayList y = new ArrayList();
y.add('T');
y.add('W');
y.add('I');
y.add('C');
y.add('E');
System.out.println("***");
for (char ch : y){
System.out.println(ch);
}
System.out.println("***");
for (char ch : y){
System.out.println(ch);
}
System.out.println();
}
}
您将看到以下输出:
***
O
N
C
E
***
***
T
W
I
C
E
***
T
W
I
C
E
带有 x 的第二个 foreach 循环似乎从它停止的地方开始(在最后一项之后),但是带有 y 的第二个 foreach 循环似乎从它第一次开始的地方开始(在第一项)。为什么会这样?我们如何才能让 Iterables 表现得像后者(ArrayLists)?
更具体地说,我们将如何修改像 IterableString 这样的类以像 ArrayList 一样工作?
【问题讨论】:
-
IterableString到底是什么??该未知对象可能与迭代器的配置方式有关... -
Iterable的 Javadoc 似乎并没有说太多,以便强制每次调用iterator()返回一个新的Iterator- 但这似乎是 JDK 接受的做法(和明智的)。所以它看起来像一个“错误”,由谁创建了IterableString。
标签: java arraylist foreach iterator iterable