演習では、ループ内でオブジェクトを別のオブジェクトに置き換える必要があります。私の解決策は、「ListIterator」を使用することです。しかし、同僚が foreach 構文を使用して参照を再生しようとしましたが、この解決策はうまくいきません。
// This doesn't work
for ( Growable growable : growables ) {
growable = growable.grow(); // Return another object (seed -> sprout, ..)
}
// But that well
for (final ListIterator<Growable> it = growables.listIterator(); it.hasNext();) {
it.set(it.next().grow());
}
ドキュメント[1]から、イテレータへの参照がないため、 foreach は置換に適していないことがわかります。
プログラムは、現在の要素を削除するために反復子にアクセスする必要があります。for-each ループは反復子を非表示にするため、remove を呼び出すことはできません。したがって、for-each ループはフィルタリングには使用できません。同様に、リストまたは配列をトラバースするときに要素を置き換える必要があるループには使用できません。
しかし、反復オブジェクトへの参照があります。私が間違っている ?「foreach」ソリューションが機能しない理由を誰かが説明できますか?
ありがとう
[1] http://docs.oracle.com/javase/1.5.0/docs/guide/language/foreach.html