Maison > Java > javaDidacticiel > le corps du texte

Covariance, invariance et contravariance en Java : quelle est la différence et pourquoi devrais-je m'en soucier ?

Susan Sarandon
Libérer: 2024-11-12 01:38:02
original
257 Les gens l'ont consulté

Covariance, Invariance, and Contravariance in Java: What's the Difference and Why Should I Care?

Covariance, invariance et contravariance expliquées en anglais simple

Introduction :
Comprendre la covariance, l'invariance, et la contravariance peuvent être difficiles, mais elles sont essentielles pour comprendre les transformations et les relations de types en Java. Cet article vise à simplifier ces concepts et à fournir des exemples concrets pour améliorer la compréhension.

Covariance :
La covariance décrit une transformation de type où la relation de sous-type est préservée. Si le type A est un sous-type du type B, alors la transformation f(A) fera que f(B) sera un sous-type de f(A).

Exemple :
Considérons une transformation f(List) = List. Depuis que Liste est un supertype de List, puis List> est un supertype de List>. Cela démontre la covariance.

Invariance :
L'invariance se produit lorsque la relation de sous-type n'est pas affectée par les transformations de type. Si A est un sous-type de B, alors f(A) ne sera pas un sous-type ou un supertype de f(B).

Exemple :
Les génériques Java se comportent de manière invariante . Par exemple, f(ArrayList
) = ArrayList. Depuis ArrayList et ArrayList sont des types différents, ni un sous-type ni un supertype de l'autre.

Contravariance :
La contravariance est l'inverse de la covariance. La relation de sous-type est inversée lors des transformations. Si A est un sous-type de B, alors f(B) sera un sous-type de f(A).

Exemple :
Considérons la transformation de type f(A[]) =B[]. En Java, les tableaux sont covariants, ce qui signifie que si A[] est un sous-type de B[], alors f(A[]) = B[] sera également un sous-type de f(B[]) = B[].

Applications :
La covariance, l'invariance et la contravariance jouent un rôle crucial dans Java :

  • Affectation : Seuls les objets de types compatibles peuvent être attribués les uns aux autres. Le compilateur vérifie si le type source est un sous-type du type cible.
  • Invocation de méthode : Lors de l'appel d'une méthode, les paramètres réels doivent être un sous-type des types de paramètres déclarés. Le type de retour de la méthode doit être un supertype du type de retour attendu.
  • Remplacement : En Java, les types de paramètres et de retour des méthodes remplacées doivent correspondre ou varier avec les types de la méthode d'origine.

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