配列はジェネリック項目を保持できますか?
Java ではジェネリック型と配列の相互作用が異なります。次のコードを考えてみましょう。
ArrayList a = new ArrayList();
このコードは正常にコンパイルされ、a という名前の汎用 ArrayList が作成されます。ただし、次のコードはコンパイルに失敗します:
ArrayList[] a = new ArrayList[10];
これはなぜですか?配列とジェネリックには互換性がないようです。これを理解するために、Java の型消去について調べてみましょう。
型消去: 舞台裏
Java はコンパイル時に型消去を実行し、ジェネリック型情報を次のように置き換えます。生の型 (オブジェクト)。これにより、文字列を整数の ArrayList に配置するようなエラーが防止されます。ただし、配列には生の型が必要であり、ジェネリックを生の型として表すことはできません。
配列の問題の修正
ジェネリック項目の配列を作成するには、明示的に次のようにすることができます。配列を目的の型にキャストします:
ArrayList[] a = (ArrayList[]) new ArrayList[10];
このキャストはコンパイラに指示します。配列は Key 要素を持つ ArrayList の配列と見なされるべきです。
リストのリスト: 例外
Java では、リストのリストは配列とみなされません。 。したがって、次のコードは型キャストなしでコンパイルされます:
ArrayList> b = new ArrayList>();
この違いは ArrayList であるため発生します。は非配列型です。
結論
配列とジェネリック型には、型消去による Java の制限があります。ただし、配列を目的のジェネリック型に明示的にキャストするか、リストのリストを使用することで、これらの制限を回避し、両方のコンテキストでジェネリック型を効果的に使用できます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3