配列はジェネリック項目を保持できますか?
ジェネリック型と配列は、Java では異なる方法で対話できます。次のコードを考えてみましょう。
<code class="java">ArrayList<Key> a = new ArrayList<Key>();</code>
このコードは正常にコンパイルされ、a という名前の汎用 ArrayList が作成されます。ただし、次のコードはコンパイルに失敗します。
<code class="java">ArrayList<Key>[] a = new ArrayList<Key>[10];</code>
これはなぜですか?配列とジェネリックには互換性がないようです。これを理解するために、Java の型消去について調べてみましょう。
型消去: 舞台裏
Java はコンパイル時に型消去を実行し、ジェネリック型情報を次のように置き換えます。生の型 (オブジェクト)。これにより、文字列を整数の ArrayList に配置するようなエラーが防止されます。ただし、配列には生の型が必要であり、ジェネリックを生の型として表すことはできません。
配列の問題の解決
ジェネリック項目の配列を作成するには、明示的に次の操作を行うことができます。配列を目的の型にキャストします。
<code class="java">ArrayList<Key>[] a = (ArrayList<Key>[]) new ArrayList[10];</code>
このキャストは、配列が Key 要素を含む ArrayList の配列と見なされるようにコンパイラーに指示します。
リストのリスト:例外
Java では、リストのリストは配列とみなされません。したがって、次のコードは型キャストなしでコンパイルされます。
<code class="java">ArrayList<ArrayList<Key>> b = new ArrayList<ArrayList<Key>>();</code>
この違いは、ArrayList が非配列型であるために発生します。
結論
Java では、型消去のため、配列とジェネリック型には制限があります。ただし、配列を目的のジェネリック型に明示的にキャストするか、リストのリストを使用することで、これらの制限を回避し、両方のコンテキストでジェネリック型を効果的に使用できます。
以上がJava では配列にジェネリック項目を保持できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。