Génériques
Java a introduit un autre type de polymorphisme depuis Java 1.5, dit paramétrique, qui permet de typer et contraindre les classes. Ces contraintes s’expriment au moyen d’une notation entre chevrons.
En reprenant l’exemple des animaux, et en supposant que l’application concerne un zoo, la modélisation inclura des enclos regroupant différents animaux. Dans ces enclos, il s’agit d’absolument éviter de mélanger des carnivores et des herbivores. Les génériques permettent de mettre en place une telle sécurité.
Exemple
public class Enclos<T extends Animal> {
private T[] animaux;
...
public ajouter(T animal) {
...
}
}
L’exemple précédent définit une notion d’enclos pour toutes sortes d’animaux, grâce à la notation entre chevrons (< >). Cette notation définit un type particulier, avec l’alias T qui sera utilisé pour tous les objets étendant la classe Animal. Cet alias peut alors être utilisé à l’intérieur de la classe en substitution du type.
La classe Enclos peut ensuite être instanciée avec l’opérateur diamant depuis Java 1.7 comme ceci :
Exemple d’utilisation avec Java 1.9
Enclos<Tigre> enclosDesTrigres = new Enclos<>();
ou dans Java 1.5 comme cela :
Exemple...