Java でジェネリック クラスの配列を作成できないのはなぜですか?

Linda Hamilton
リリース: 2024-11-03 20:51:29
オリジナル
337 人が閲覧しました

Why Can't I Create Arrays of Generic Classes in Java?

ジェネリック クラスの配列の作成

ArrayList などのジェネリック クラスの配列を初期化しようとすると、次のような問題が発生する可能性があります。 「ジェネリック配列の作成」というエラー。

エラーの原因

Java は、型安全性の問題のため、ジェネリック クラスの配列の直接作成をサポートしていません。この機能が許可されている場合、次の例に示すように、潜在的な型エラーが発生する可能性があります。

<code class="java">List<String>[] lsa = new List<String>[10]; // illegal
Object[] oa = lsa;  // OK because List<String> is a subtype of Object
List<Integer> li = new ArrayList<Integer>();
li.add(new Integer(3));
oa[0] = li;
String s = lsa[0].get(0);</code>
ログイン後にコピー

このシナリオでは、oa 配列は lsa 配列に割り当てられますが、整数値はインデックス 0 のリストに追加されます。lsa からインデックス 0 の要素を取得し、それを String にキャストしようとすると、ClassCastException が発生します。

回避策

Toこの制限を回避するには、配列の代わりにコレクションを使用することを検討してください。例:

<code class="java">public static ArrayList<List<MyObject>> a = new ArrayList<List<MyObject>>();</code>
ログイン後にコピー

または、配列要素型として機能する補助クラスを作成できます。

<code class="java">class MyObjectArrayList extends ArrayList<MyObject> { }</code>
ログイン後にコピー
<code class="java">MyObjectArrayList[] a = new MyObjectArrayList[2];</code>
ログイン後にコピー

コレクションまたは補助クラスを使用すると、Javaコンパイラは型の安全性を確保し、潜在的なエラーを防ぐことができます。

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

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