Java でジェネリック リストの配列を作成するとコンパイラ エラーが発生するのはなぜですか?

Barbara Streisand
リリース: 2024-11-03 23:16:31
オリジナル
604 人が閲覧しました

Why Does Creating an Array of Generic Lists in Java Cause a Compiler Error?

ジェネリック リストの配列

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 に消去されます。ただし、2 番目の例では、コンパイラーは許可されていない raw 型 ArrayList[] を検出します。採用されたキャストにより、結果の配列のコンポーネントの型が定義された型と一致することが保証されます。

ArrayList は配列ではないため、同じ制限を受けないため、リストのリストのアプローチではこれらの問題が排除されます。

以上がJava でジェネリック リストの配列を作成するとコンパイラ エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート