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
Susan Sarandonoriginal
2024-11-28 01:37:14285parcourir

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!

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