Java では、ジェネリックと配列を利用すると課題が生じる可能性があります。特定の構造は有効に見えるかもしれませんが、コンパイラは異議を唱える可能性があります。
次の例を考えてみましょう:
<code class="java">ArrayList<Key> a = new ArrayList<Key>(); // Compiles without issue</code>
ただし、汎用リストの配列を作成しようとする場合:
<code class="java">ArrayList<Key>[] a = new ArrayList<Key>[10]; // Compiler error</code>
このエラーは型の消去が原因で発生します。これを解決するには、次のように配列をキャストします:
<code class="java">ArrayList<Key>[] a = (ArrayList<Key>[]) new ArrayList[10];</code>
またはリストのリストを使用します:
<code class="java">ArrayList<ArrayList<Key>> b = new ArrayList<ArrayList<Key>>(); // No error</code>
これらの観察の背後にある理論的根拠を理解するには、次のことを理解することが重要です。 Java の型消去メカニズム。コンパイル中に、ジェネリック型の型情報が消去されるため、ジェネリック型は生の対応物として扱われます。これは、配列が生の型でしか機能しないためです。
最初の例では、ArrayList
ArrayList は配列ではないため、同じ制限を受けないため、リストのリストのアプローチではこれらの問題が排除されます。
以上がJava でジェネリック リストの配列を作成するとコンパイラ エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。