可能重複:
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