Ajouter une contrainte sur le type de paramètre

Le programme que nous venons d’écrire présente encore une petite faille.

Créons un nouvel objet, telle une classe :

data class Chair(val color: String) 

Dans le programme principal, rien ne nous empêche de créer un chenil de chaises :

val chairKennel = Kennel<Chair>() 

Ce programme n’a pas vraiment de sens. En tant que créateur du projet, nous ne risquons pas de l’écrire. Mais si plusieurs développeurs interviennent sur le code source, ils n’auront pas forcément en tête le contexte de création des classes et pourront les utiliser de manière incohérente. C’est pourquoi, quand on écrit du code, il faut être le plus expressif possible et mettre en place autant de gardes fous que possible. Dans le cas présent, nous aimerions que le chenil ne puisse contenir que des animaux, tout en gardant la généricité mise en place.

La solution consiste à indiquer que le type de paramètre T doit être un animal, via la syntaxe valant pour l’expression de l’héritage :

class Kennel<T: Animal> 
{ 
 //... 
} 

Le reste de la classe reste strictement identique. Il n’est maintenant plus possible de créer un chenil pour des chaises. Bien évidemment, rien n’empêchera un développeur de modifier la classe Chair pour que celle-ci implémente l’interface...

couv_RIKOT.png

Découvrez 

le livre :

Aussi inclus dans nos :

Précédent
Utiliser une classe générique
Suivant
Ajouter plusieurs contraintes sur le type de paramètre