Ajouter plusieurs contraintes sur le type de paramètre
Si la modification précédente permet d’éviter la création d’un chenil de chaises, il est toujours possible de mélanger des chats et des chiens dans le même chenil. En effet, nous avons indiqué ici que le type de paramètre T doit être un animal, mais le type Animal est inclus. Par conséquent, rien de nous empêche de créer un chenil contenant des animaux via la syntaxe suivante :
val animalKennel = Kennel<Animal>()
Puisque les classes Cat et Dog implémentent toutes les deux l’interface Animal, nous pouvons toujours ajouter ces deux types d’animaux dans le chenil.
Peut-on s’en sortir ? À chaque solution, un nouveau problème !
En programmation, il y a toujours moyen de s’en sortir. Ainsi, nous pouvons définir des règles métier supplémentaires sur le chenil. Exemple : tous les animaux ne sont pas éligibles à être accueillis dans un chenil (comme des lions, des tigres, des éléphants, etc.).
Imaginons une nouvelle interface que les animaux éligibles à l’accueil dans un chenil doivent implémenter :
interface Kennelable
Modifions les classes Cat et Dog pour qu’elles implémentent cette nouvelle interface :
data class Dog(val name: String)
: Animal, Kennelable
data class Cat(val name: String)
: Animal, Kennelable
Modifions...