ホームページ >Java >&#&チュートリアル >Java でジェネリック配列を作成できないのはなぜですか?

Java でジェネリック配列を作成できないのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-28 22:15:31603ブラウズ

 Why Can't I Create Generic Arrays in Java?

Java のジェネリック配列

配列とジェネリックは、Java でプログラミングの障害を引き起こします。パラメトリック型の配列を直接作成することはできません。これは、配列が共変であり、実行時に要素の型を保持するのに対し、ジェネリックは型消去を使用するためです。

回避策は、次のように Array.newInstance() を使用することです。

private Comparable[] hashtable;

...

hashtable = (Comparable[])Array.newInstance(Comparable.class, tableSize);

ただし、この解決策は理想的ではないことに注意することが重要です。

ジェネリック配列を使用しないのはなぜですか?

  • 配列は共変ですが、ジェネリックは共変ではありません.
  • これは、スーパータイプの配列が必ずしもサブタイプの配列であるとは限らないことを意味します。
  • たとえば、Object[] 配列は必ずしも Comparable[] 配列であるとは限りません。

これらの問題を回避するには、ジェネリックスを操作するときに配列の代わりに ArrayList を使用することをお勧めします。 ArrayList は共変でタイプセーフであるため、ジェネリック型を格納する場合に適しています。

詳細な説明については、Java ジェネリック FAQ を参照してください。

コンポーネントの型が具体的なパラメーター化型である配列を作成できますか?

いいえ、タイプセーフではないためです。

配列は共変です。これは、スーパータイプ参照の配列がサブタイプ参照の配列のスーパータイプであることを意味します。つまり、Object[] は String[] のスーパータイプであり、文字列配列には Object[] 型の参照変数を介してアクセスできます。

以上がJava でジェネリック配列を作成できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。