Java ジェネリックが共変ではないのはなぜですか?

Susan Sarandon
リリース: 2024-11-20 14:16:18
オリジナル
1001 人が閲覧しました

Why Are Java Generics Not Covariant?

Java ジェネリックスと共分散: 制限事項を理解する

ジェネリックスの共分散とは、サブタイプを違反することなくスーパータイプに置き換えることができる機能を指します。タイプセーフティ。ただし、Java では、ジェネリックは共変ではありません。つまり、サブタイプをスーパータイプ変数に割り当てることができません。

この概念を説明するために、次のコード スニペットを考えてみましょう。

List<Integer> li = new ArrayList<Integer>();
List<Number> ln = li; // illegal
ln.add(new Float(3.1415));
ログイン後にコピー

ここで、ln はli のエイリアス。これは、ln が li と同じリストを参照することを意味します。ただし、ln は List として宣言されており、Number を拡張する任意の型を保持できることを示しています。これには、整数ではない Float が含まれます。

共分散が許可される場合、上記のコードは正当ですが、タイプ セーフに違反します。 List を割り当てることで、 (つまり、li) を List に変換します。 (つまり ln)、整数以外の値をリストに追加する可能性があり、整数のリストとしての整合性が損なわれる可能性があります。

したがって、型の安全性を維持するために、Java ジェネリックは共変ではありません。この制限により、ジェネリック コンテキストではサブタイプをスーパータイプと互換的に使用できなくなり、潜在的な型エラーが防止されます。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート