Les classes génériques covariantes Classe:générique covariante

Le but d’une classe générique covariante est de pouvoir utiliser la classe générique avec un type dérivé du type générique. On peut par exemple déclarer une variable comme portant le type Animal tout en lui affectant un objet de type Dog, car la classe Dog implémente la classe Animal.

Pour mettre en place cette covariance, on écrit le mot-clé out devant le type générique. Ce qui donne dans la classe Kennel : out

class Kennel<out T> 
{ 
 
 //... 
 
} 

Le programme suivant crée une variable de type Kennel<Animal>, qui est pourtant instanciée avec un objet de type Kennel<Dog> :

fun main() 
{ 
 val kennel: Kennel<Animal> = Kennel<Dog>() 
} 

Ce court programme compile parfaitement. Dès lors que l’on retire le mot-clé out devant le type générique de la classe Kennel, le programme ne compile plus et présente l’erreur suivante :

Type mismatch: inferred type is Kennel<Dog> but Kennel<Animal> 
was expected 

Afin de pouvoir utiliser les classes génériques covariantes, une restriction doit être respectée. Si la classe générique contient des méthodes, le type générique doit être utilisé uniquement comme type de retour. Il ne peut pas être utilisé comme...

couv_RIKOT.png

Découvrez 

le livre :

Aussi inclus dans nos :

Précédent
Ajouter plusieurs contraintes sur le type de paramètre
Suivant
Les classes génériques contravariantes