Java5では、次のように記述できます。
Foo[] foos = ...
for (Foo foo : foos)
またはforループでIterableを使用するだけです。これはとても便利です。
ただし、次のようにイテラブルのジェネリックメソッドを作成することはできません。
public void bar(Iterable<Foo> foos) { .. }
Iterableではないため、配列で呼び出します。
Foo[] foos = { .. };
bar(foos); // compile time error
このデザイン決定の背後にある理由について疑問に思っています。
java.lang.reflect.Array
が、そのパフォーマンスは弱いです。ただし、必要に応じて、独自のイテレータ(またはList実装!)を記述して、プリミティブ型の配列をラップすることができます。