JDK5の拡張for文についてですが、JDK1.4まではfor文はfor(初期化式;ループ条件式;反復式)でしたが、for(型 変数 : 変数)というようなループができるようになりました。例えばこんなコードです。
上記コードを実行すると、
と表示されます。配列だけではなくjava.util.Listのサブクラスも対応しています。
結果は同じく、
となります。この構文で対応しているのは配列型とjava.lang.Iterable型です。上記の例であげたjava.util.Listもjava.lang.Iterableを実装しています。逆に言うと、java.lang.Iterableを実装しているクラスのインスタンスは何でも拡張for文による列挙対象になります。
では、独自のクラスのjava.lang.Iterableを実装させて拡張for文の対象とさせてみましょう。
これを実行すると、同じく
となります。他にオートボクシングを流用すると、こんなコードもかけます。
Integer型を格納できるList型に対してintの値を追加していますが、オートボクシング機能によって、ラッパー型とプリミティブ型の相互変換が行われてInteger型として格納されます。拡張for文で取得するときには逆にInteger型からint型へ変換されて取得されます。
いろんなパターンを書きましたが、拡張for文の基本は配列とIterableが利用できるというところを抑えておくとよいと思います。
追記:C#のIEnumerableと同じ感じですね。
http://blogs.wankuma.com/rti/archive/2007/04/06/70413.aspx
http://blogs.wankuma.com/rti/archive/2007/04/09/70728.aspx