1. ホーム
  2. java

[解決済み] 配列はなぜIterableに代入できないのですか?

2022-04-13 08:53:25

質問

をJava5で書くことができます。

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

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

しかし、このようにイテラブルの汎用メソッドを書くことはできない。

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

で、Iterable ではないので配列で呼び出す。

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

このデザイン決定の背景には、どのような理由があるのか気になります。

どのように解決するのですか?

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

(そうは言っても clone を配列の上に置くことができます)。