Maison > Java > javaDidacticiel > Génériques Java : quel est le problème avec le ` ? super` Mot-clé ?

Génériques Java : quel est le problème avec le ` ? super` Mot-clé ?

Susan Sarandon
Libérer: 2024-11-28 01:37:14
original
227 Les gens l'ont consulté

Java Generics: What's the Deal with the `? super` Keyword?

Java Generics : résoudre l'énigme du mot-clé « Super »

Malgré l'exploration de diverses ressources sur les génériques, vous rencontrez toujours une confusion concernant le ' super' mot-clé. Examinons les subtilités de l'utilisation de « super » dans les génériques Java pour clarifier ces doutes.

1. Résoudre la contradiction avec « ? super Number'

Lors de la déclaration d'une collection comme 'List', vous pouvez supposer qu'il peut contenir des objets qui sont les parents de Number. Cependant, l'inverse se produit : vous pouvez ajouter des entiers mais pas des objets.

La raison réside dans la conversion de capture. 'Liste&Lt ; ? super Numéro>' ne peut capturer que les types qui peuvent étendre Number et ses supertypes. Puisque Object est une superclasse de Number, mais pas une extension, il ne peut pas être capturé. Cependant, Integer est un sous-type de Number, il peut donc être ajouté.

2. Déchiffrer le comportement avec 'List' et 'test()'

Compilation de 'test(sList);' échoue car 'List' n'est-il pas convertible en capture par 'List'. Bien que String soit un supertype d'Object, Object n'est pas une extension de Number. Cela viole les règles de capture-conversion.

En résumé, '? super T' indique que la collection peut contenir des objets de type T ou l'une de ses superclasses qui sont compatibles avec les extensions. Cependant, cela n'inclut pas tous les supertypes, uniquement ceux qui étendent le type spécifié.

3. Pourquoi '' est interdit

Java n'autorise pas '' car cela conduit à des situations ambiguës. Par exemple, "Liste" pourrait capturer à la fois 'List' et 'Liste' (puisque Object est un supertype de tous les objets). Cela violerait la sécurité du type générique.

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