Maison > Java > javaDidacticiel > le corps du texte

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

Linda Hamilton
Libérer: 2024-11-21 04:19:10
original
853 Les gens l'ont consulté

Why Aren't Java Generics Covariant?

Covariance des génériques Java

En Java, les génériques ne sont pas covariants, comme expliqué dans l'article fourni. Cela signifie que si une classe étend une classe générique, le type générique de la classe enfant ne peut pas être un sous-type du type générique de la classe parent.

Comprendre le concept « Alias ​​»

L'auteur mentionne que "si ln était alias avec li", cela romprait la promesse de sécurité de type. Un alias fait référence à un nom alternatif ou à une référence à un objet. Dans ce scénario, li est un alias de ln.

Un exemple illustratif

Considérez le code suivant :

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

Bien qu'Integer hérite de Nombre, l’ajout d’un objet Float à ln est illégal. En effet, en alias li en ln, nous disons essentiellement que li peut contenir des nombres. Cependant, li a été initialement déclaré comme ne contenant que des nombres entiers. Par conséquent, l'ajout d'un Float à ln viole la garantie de sécurité de type de li.

Conclusion

Cet exemple démontre que les génériques ne sont pas covariants en Java. Tenter d'attribuer le type générique d'une sous-classe au type générique d'une superclasse entraînera une erreur de compilation.

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