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!