可能重复:
Why is Java's Iterator not an Iterable?为什么扩展for循环对迭代器不起作用?
我们都知道Java的扩展for
循环:
List<X> list = ...
for(X x : list) { ... }
我需要的是:
Iterator<X> listIterator = ...
for(X x : listIterator){ ... }
Java不允许这样做。 我想知道规范不支持这个是否有充分的理由。
这里是我的用例:
我正在写一类文件格式的阅读器。这样的文件包含要读取的条目。为了这个例子,假设我试图重新创建BufferedReader并且我的元素是字符串。
我与原BufferedReader
的API风格,这迫使我写丑陋的代码非常不高兴,如:
for(String line = reader.readLine(); line != null; line = reader.readLine(){
...
}
我宁愿有一些不错的像
for(String line : reader){
...
}
当然我可以让我的BufferedReader
执行Iterable<String>
。但这意味着可能会多次调用一个iterator()
方法。由于我无法在文件中查找,因此我无法真正支持多个并行迭代器。
有我的BufferedReader
执行Iterator<String>
而不是Iterable<String>
似乎更合理。但我不能使用for
声明:-(
您是否检查过高级循环是否多次调用“迭代器”方法?我会认为它只做一次.. – 2011-12-18 21:28:10
标题问题的答案是“因为这是语言的定义方式”。 – 2011-12-18 21:31:06
同样,我不同意它是重复的。我非常了解这两个接口的有意义的区别。我在问为什么这个差异与for循环有关。我也知道它是这样指定的。我想知道为什么这样指定。 – Stefan 2011-12-18 21:32:27