配列をIterableに代入できないのはなぜですか? 質問する

配列をIterableに代入できないのはなぜですか? 質問する

Java5 では次のように記述できます:

Foo[] foos = ...
for (Foo foo : foos) 

または、 for ループで Iterable を使用するだけです。 これは非常に便利です。

ただし、次のように iterable のジェネリック メソッドを記述することはできません。

public void bar(Iterable<Foo> foos) { .. }

Iterable ではないため、配列で呼び出します。

Foo[] foos = { .. };
bar(foos);  // compile time error 

この設計上の決定の背後にある理由が気になります。

ベストアンサー1

Cloneable配列はインターフェース (および)を実装できますjava.io.Serializable。では、なぜできないのでしょうかIterable。 はメソッドIterableの追加を強制しますiteratorが、配列はメソッドを実装しません。 はchar[]をオーバーライドすらしません。toStringとにかく、参照の配列は理想的ではないと考えるべきです - を使用してくださいList。dfa のコメントとして、Arrays.asListは明示的に変換を行います。

(そうは言っても、clone配列を呼び出すことは可能です。)

おすすめ記事