Java でパラメータ化された型の配列を作成できますか?

Mary-Kate Olsen
リリース: 2024-10-30 02:17:28
オリジナル
817 人が閲覧しました

 Can I Create an Array of a Parameterized Type in Java?

Java のジェネリック配列: 包括的なダイブ

Java の配列とジェネリックは、一見すると互換性がないように見えるかもしれません。ジェネリックは型の安全性と柔軟性を可能にしますが、Java の配列は本質的に共変であり、実行時に要素の正確な型を保持することを意味します。これは、ジェネリック型の配列を作成しようとするときに問題になります。

次のコード スニペットを考えてみましょう:

<code class="java">public class Hash<T extends Comparable<String>> {
    private T[] hashTable;
    // ...
}</code>
ログイン後にコピー

このコードは、Comparable を拡張するジェネリック オブジェクトの配列を作成しようとします。ただし、コンパイル中に表示されるエラー メッセージに見られるように、Java では、オブジェクト配列をパラメータ化された型の配列にキャストすることはできません。

java.lang.Object; cannot be cast to [Ljava.lang.Comparable;
ログイン後にコピー

この問題を回避するには、配列を使用できます。 newInstance() メソッド:

<code class="java">private Comparable[] hashtable;
// ...
hashtable = (Comparable[])Array.newInstance(Comparable.class, tableSize);</code>
ログイン後にコピー

ただし、このアプローチでもパラメーター化された型の配列は作成されません。 Java の配列は実行時に型安全であるため、自由に別の型にキャストすることはできません。

Java のジェネリックスは型消去を受け、コンパイル中に型パラメーターが削除されます。これにより、配列が特定の要素タイプを保持し、意図しないキャストが防止されます。その結果、特定のパラメーター化された型の配列を作成することはできません。

この特定のケースでは、配列の代わりに ArrayList を使用することをお勧めします。 ArrayList は動的なサイジングとジェネリックスのサポートを提供し、ほとんどのシナリオにより適しています。

この問題の詳細な説明については、Java Generics FAQ を参照してください: https://docs.oracle.com/javase/7 /docs/technotes/guides/generics/faq.html#コンポーネント タイプがコンクリートパラメータ化タイプである配列を作成できます

以上がJava でパラメータ化された型の配列を作成できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!