概要
配列要素が共有する汎用配列共通型パラメータは、ジェネリックスと配列の共変動作の間の相互作用により、Java に特有の課題をもたらします。
質問
次のようなジェネリックスの配列を作成できますか?ジェネリック型は比較可能なものを拡張しますか? Comparable face の問題を拡張するジェネリック配列に Object 配列をキャストしようとすると、次の質問が生じます: 回避策はありますか?
Answer
ジェネリックと配列: 互換性パズル
ジェネリックと配列では、型の処理方法が根本的に異なります:
この不一致により、ジェネリックの配列が作成されます。特定のクラスを拡張する型は使用できません。
Array.newInstance(): 回避策
考えられる解決策の 1 つは、Array.newInstance() メソッドを使用することです。
<code class="java">private Comparable[] hashtable; ... hashtable = (Comparable[])Array.newInstance(Comparable.class, tableSize);</code>
このアプローチでは、ジェネリック型のスーパータイプ (この場合は Comparable) の配列を作成できますが、この配列は目的のジェネリック型ではないことに注意することが重要です。
ジェネリックで配列を使用しない理由
回避策はありますが、一般にジェネリックで配列を使用することは次の理由から推奨されません。
代替: ArrayList
より適切なオプションは、ArrayList を使用することです。これは、汎用オブジェクトのコレクションを管理するための効率的でタイプセーフな方法を提供します。 ArrayList はジェネリックの柔軟性を提供し、配列とジェネリックに関連する潜在的な落とし穴を回避します。
以上がJava で比較可能な範囲を拡張する汎用配列を作成できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。