Maison > Java > javaDidacticiel > Comment la covariance, l'invariance et la contravariance affectent-elles les relations de types dans la programmation ?

Comment la covariance, l'invariance et la contravariance affectent-elles les relations de types dans la programmation ?

Barbara Streisand
Libérer: 2024-11-12 03:28:01
original
317 Les gens l'ont consulté

How do Covariance, Invariance, and Contravariance Affect Type Relationships in Programming?

Covariance, invariance et contravariance en anglais simple : une explication complète

La covariance, l'invariance et la contravariance sont des concepts de programmation qui décrivent comment le la relation entre les types et les sous-types est affectée par les transformations de type. Ces concepts jouent un rôle crucial dans la compréhension du polymorphisme et de la sécurité des types dans les langages de programmation.

Covariance

Une covariance indique que la relation de sous-type est préservée par la transformation de type. En d’autres termes, si le type A est un sous-type du type B, alors le type transformé f(A) est également un sous-type de f(B). Par exemple, considérons la transformation f(A) = List, où List est déclarée comme :

class List<T> { ... }
Copier après la connexion
Copier après la connexion

Depuis List est un sous-type de List, nous avons f(String) = List est un sous-type de f(Object) = List. Par conséquent, f est covariant.

Contravariance

La contravariance est l'opposé de la covariance. Cela indique que la relation de sous-type est inversée par la transformation de type. Si A est un sous-type de B, alors f(B) est un sous-type de f(A). Par exemple, considérons la transformation f(A) = A[]. La transformation inverse la relation de sous-type entre les tableaux : Object[] est un sous-type de String[], mais String[] n'est pas un sous-type de Object[]. Cela rend f contravariant.

Invariance

L'invariance se produit lorsque ni la covariance ni la contravariance ne sont valables. En d’autres termes, la relation de sous-type n’est ni préservée ni inversée par la transformation de type. Par exemple, considérons la transformation f(A) = Map. Si A est un sous-type de B, rien ne garantit que f(A) = Map est un sous-type de f(B) = Map. Ainsi, f est invariant.

Applications dans les fonctionnalités du langage