ジェネリックを使用した配列の作成
問題:
配列とその基礎となる配列を作成する際のジェネリックの制限を理解する理由なぜ。
コンテキスト:
配列とジェネリックスには、具体化や型の強制など、基本的な違いがあります。
説明:
配列 vs.ジェネリック:
- 配列は具体化されます。つまり、実行時に型情報が保持されます。
- ジェネリックは具体化されません。つまり、型情報はコンパイル中に消去されます。
タイプ共分散:
- 配列は共変であり、スーパークラス型の配列をサブクラス型の配列に代入できます。
- ジェネリックは不変であり、そのような代入は禁止されています。
強制タイプチェック:
- ジェネリックは、実行時エラーを防ぐためにコンパイル時に強力な型チェックを提供します。
- 配列は、型の互換性を強制するために実行時に配列ストア チェックを使用します。
汎用配列の問題作成:
- 汎用コンポーネント型を使用した配列の作成は、実行時の型情報が不明なため安全ではなく、ArrayStoreExceptions が発生する可能性があります。
無制限のワイルドカードの例外タイプ:
- の配列無制限のワイルドカード型 (List>[] など) は具体化可能であり、任意のオブジェクトの割り当てを許可するため許可されます。
E[]:
の回避策
- Array#newInstance() メソッドを使用して、目的のジェネリック型の配列を作成し、キャストします。
結論:
配列とジェネリックの動作の基本的な違いにより、ジェネリック配列の作成は制限されています。配列とジェネリックを使用する場合は、基礎となる型強制メカニズムと安全性への影響を慎重に考慮する必要があります。
以上がJava でジェネリック配列を直接作成できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。