Maison > Java > javaDidacticiel > le corps du texte

Pourquoi les génériques Java ne sont-ils pas covariants ?

Susan Sarandon
Libérer: 2024-11-20 14:16:18
original
1001 Les gens l'ont consulté

Why Are Java Generics Not Covariant?

Génériques Java et covariance : comprendre les limites

La covariance dans les génériques fait référence à la capacité d'un sous-type à remplacer son supertype sans violer tapez la sécurité. Cependant, en Java, les génériques ne sont pas covariants, ce qui signifie que les sous-types ne peuvent pas être attribués à des variables de supertype.

Pour illustrer ce concept, considérons l'extrait de code suivant :

List<Integer> li = new ArrayList<Integer>();
List<Number> ln = li; // illegal
ln.add(new Float(3.1415));
Copier après la connexion

Ici, ln est alias avec li, ce qui signifie que ln fait référence à la même liste que li. Cependant, ln est déclaré comme List, indiquant qu’il peut contenir n’importe quel type qui étend Number. Cela inclut Float, qui n'est pas un entier.

Si la covariance était autorisée, le code ci-dessus serait légal, mais il violerait la sécurité des types. En attribuant une valeur List (c'est-à-dire li) à une liste (c'est-à-dire ln), nous pourrions potentiellement ajouter des valeurs non entières à la liste, ce qui compromettrait son intégrité en tant que liste d'entiers.

Par conséquent, pour maintenir la sécurité des types, les génériques Java ne sont pas covariants. Cette limitation garantit que les sous-types ne peuvent pas être utilisés de manière interchangeable avec les supertypes dans des contextes génériques, évitant ainsi les erreurs de type potentielles.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal