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
Libérer: 2024-12-06 14:18:15
original
774 Les gens l'ont consulté

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