0
Iterator<String> iterator=...

//right way
for (Iterator<String> i = iterator; i.hasNext(); ){
    System.out.println(i.next());
}

//why can't?
for(String i:iterator){         
}

参照:

http://docs.oracle.com/javase/1.5.0/docs/guide/language/foreach.html

http://docs.oracle.com/javase/6/docs/api/java/util/Iterator.html

4

4 に答える 4

4

よりコンパクトに行うことができます:

for(String i:list){
}  

構文は、イテレータ(および配列)専用であり、イテレータを直接(および列挙型)用ではありません。

なぜだめですか?わかりません...「まれな」ケースでは、(コンパイラの実装における)複雑さや労力が多すぎるかもしれません。または、問題を引き起こす可能性のあるエッジケース(イテレータでもあるIterableなど、一部の人々はそのような獣を作ると思います)。

たぶん、Google Guavaのようなライブラリを試して、イテレータ、コレクション、および友達と連携するためのより便利な方法を入手してください。

于 2012-06-15T06:19:33.023 に答える
2

コンパイラは、の構文をチェックして拡張を確認し、コロンの後の式がIterableインターフェイスを実装するオブジェクトを返すことを要求します。Iteratorはそれを実装していません。

于 2012-06-15T06:19:05.187 に答える
2

forループ構文は、Iterableインターフェイスを実装するオブジェクトでのみ使用できます。

イテレータは反復可能ではありません。

于 2012-06-15T06:20:04.017 に答える
-1
    for(String i:list){
        //
    }
于 2012-06-15T06:19:13.503 に答える