Les classes génériques contravariantes Classe:générique contravariante

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

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

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

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

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

Une nouvelle fois, ce court programme compile parfaitement. Cependant, si l’on retire le mot-clé in devant le type générique de la classe Kennel, une erreur de compilation accompagnée du message suivant apparaît :

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

Afin de pouvoir utiliser les classes génériques contravariantes, 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 pour les arguments...

couv_RIKOT.png

Découvrez 

le livre :

Aussi inclus dans nos :

Précédent
Les classes génériques covariantes
Suivant
En résumé