配列の共分散とジェネリックの不変性
Java の配列とジェネリックは異なる共分散の動作を示すため、設計上の決定について疑問が生じます。配列は共変ですが、ジェネリックは不変です。つまり、サブタイプの関係は型パラメーターには適用されません。
配列の共分散
Java では、配列は共変です。 X が Y のサブタイプである場合、X[] も Y[] のサブタイプになります。この共分散により、さまざまな型の配列に対する多態的な操作が可能になります。たとえば、Object[] を受け取るメソッドは String[] を問題なく受け入れることができます。
配列におけるこの共変動作は、その基本的な性質に由来します。特定の型の値を配列に格納しても、配列自体の組み込み型は変更されません。したがって、配列はさまざまなサブタイプの要素を保持できます。
ジェネリックの不変性
配列とは異なり、Java のジェネリックは不変です。リスト
ジェネリックスが共変である場合、型 Y の要素を List
配列の共分散とジェネリックの不変性の理由
配列を共変にする決定は、次の理由によって行われました。多態性配列操作の必要性。共分散がなければ、有用なプログラムは特定の不変型の配列での操作に制限されていたでしょう。
対照的に、ジェネリックの不変性は、ジェネリック型に対する操作が指定された型パラメーターを尊重することを保証することで型の安全性を保護します。これにより、互換性のない型が誤って割り当てられることが防止され、汎用コードの信頼性と予測可能性が維持されます。
以上がJava 配列は共変であるのに、ジェネリックは不変であるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。