Java のジェネリック配列
Java では、ジェネリックと配列は直接共存しません。同等の型を拡張するジェネリックの配列を作成しようとすると、エラーが発生する場合があります。この根本的な理由は、Java ジェネリックがコンパイル中に消去されるためです。
次のコードを考えてみましょう:
<code class="java">public class Hash<T extends Comparable<String>> { private T[] hashTable; private int tableSize; Hash(int records, double load) { tableSize = (int)(records / loadFactor); tableSize = findNextPrime(tableSize); hashTable = (T[])(new Object[tableSize]); // Error: Object cannot be cast to Comparable } }</code>
Java の型消去は配列を共変として扱います。つまり、配列は要素の型を維持します。実行時。したがって、ジェネリック型の配列は、同等の型の配列と同じ型ではなく、後者を前者にキャストすることはできません。
この問題を回避するには、Array.newInstance を使用することが回避策の 1 つです。 ():
<code class="java">private Comparable[] hashtable; ... hashtable = (Comparable[])Array.newInstance(Comparable.class, tableSize);</code>
ただし、このアプローチには限界があります。レガシー コード、外部ライブラリ、または他の言語との相互運用性には、真のジェネリック配列が必要な場合があります。
最終的には、Java でジェネリックを含む配列の使用を避けることが一般的に推奨されます。代わりに、より柔軟性と型安全性を提供する ArrayList や HashMap などのコレクション クラスの利用を検討してください。
以上がJava でジェネリックスの配列を作成できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。