可能性の重複:
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を再開発しようとしていて、私の要素はStringsであると仮定します。
私はのような醜いコードを書くために私を強制的に元BufferedReader
のAPIスタイルで、非常に不幸だ:私はむしろ当然のことながら
for(String line : reader){
...
}
のような素敵な何かを持っていると思います
for(String line = reader.readLine(); line != null; line = reader.readLine(){
...
}
BufferedReader
にIterable<String>
を実装させることができます。しかし、これは、数回呼び出されるかもしれないiterator()
メソッドがあることを意味します。私はファイルを探すことができないので、私は実際には複数の並列イテレータをサポートすることはできません。
私のBufferedReader
を実装すると、Iterable<String>
の代わりにIterator<String>
が実装されているようです。しかし、私はあなたがより多くのそして一度ファイルを開くことができます。あなたは、複数の並列イテレータをサポートすることができます。もちろん、
アドバンストループが「イテレータ」メソッドを複数回呼び出すかどうか確認しましたか?私はそれが一度だけ行うと仮定します。 –
見出しの質問への答えは "それが言語が定義されている方法なので"です。 –
もう一度、私はそれが重複していることに同意します。私は2つのインターフェースの相違点をよく知っています。私はなぜこの違いがforループに関して関係があるのかを尋ねています。私はまた、このように指定されていることを認識しています。私はなぜそれがこのように指定されたのだろうと思っています。 – Stefan