Maison >Java >javaDidacticiel >Plusieurs caractères génériques dans les méthodes génériques peuvent-ils faire référence à différents types ?

Plusieurs caractères génériques dans les méthodes génériques peuvent-ils faire référence à différents types ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-06 14:18:15713parcourir

Can Multiple Wildcards in Generic Methods Refer to Different Types?

Caractères génériques multiples sur les méthodes génériques

Question : Différents caractères génériques dans les méthodes génériques peuvent-ils faire référence à des types complètement différents, et comment fonctionne le caractère générique imbriqué se comportent ?

Réponse :

Les caractères génériques imbriqués sont la source de confusion, et non plusieurs caractères génériques.

  • Caractères génériques imbriqués : Une liste> n'est PAS une liste> car les génériques Java sont invariants, ce qui signifie qu'une liste n'est pas une liste. De même, une liste> n'est pas une liste>.
  • Caractères génériques dans les méthodes génériques :

    • Plusieurs caractères génériques non liés dans les méthodes génériques sont autorisés , par exemple, Liste liste1, Liste list2.
    • Cependant, la méthode addAll(list2) sur list1 est autorisée car le type générique capturé par ? dans les deux listes peuvent être différents.
    • Si les caractères génériques ont des limites supérieures explicites (par exemple, ? étend la liste>), alors des restrictions supplémentaires s'appliquent.

Extrait Explications :

  • LOLUnknowns1 :ProbablyIllegal ajoute une liste liste à une liste> mdr. Cela compile parce que ? dans la liste peut faire référence à n'importe quel type, tandis que List> peut contenir des listes de n'importe quel type.
  • LOLUnknowns1a: Quand pareil ? est utilisé pour List types, la compilation échoue car les règles de conversion de capture pour les caractères génériques imbriqués interdisent l'utilisation d'un seul ? pour les deux listes.
  • LOLUnknowns1b : Lorsqu'un argument est explicitement nul, la compilation réussit car null est applicable à tout type générique et ne participe pas à la conversion de capture.
  • DoubleLOL : Ajout de deux List> instances est autorisée car la conversion de capture ne s'applique pas de manière récursive, ce qui signifie ? peut faire référence à différents types dans chaque liste.
  • IntoTheWild : Création d'une liste> pour une Liste> n'est pas autorisé car la conversion de capture n'est pas appliquée de manière récursive.
  • IntoTheWild2 : La conversion de capture ne peut pas être appliquée au type de liste interne, donc List> n'est pas une liste>.

En résumé, plusieurs caractères génériques dans les méthodes génériques permettent une flexibilité dans la gestion des types inconnus, tandis que les caractères génériques imbriqués ont des restrictions spécifiques liées à la conversion de capture.

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