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

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

Linda Hamilton
Linda Hamiltonoriginal
2024-11-21 04:19:10839parcourir

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));

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!

Déclaration:
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