ホームページ > Java > &#&チュートリアル > Java では配列にジェネリック項目を保持できないのはなぜですか?

Java では配列にジェネリック項目を保持できないのはなぜですか?

Mary-Kate Olsen
リリース: 2024-11-03 20:28:02
オリジナル
430 人が閲覧しました

Why Can't Arrays Hold Generic Items in Java?

配列はジェネリック項目を保持できますか?

ジェネリック型と配列は、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 サイトの他の関連記事を参照してください。

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