La généricité permet de travailler avec des variables dont on ne connaît a priori pas le type lors de la rédaction du programme.
Une première solution consiste à référencer le type Object et à transtyper. Mais cette solution montre très vite ses limites.
La généricité est disponible depuis le JDK 5.0
Cette notion est fort proche de l’introspection, puisque cette dernière permet de connaître le type d’une variable.
Dans l’exemple ci-contre, nous construisons un gardien,
c’est à dire un objet capable d’en conserver n’importe quel autre.
Accueil
Gardien
Gardien de deux objets
Véhicule
Avion, hérite de Véhicule
La généricité peut aussi fonctionner avec deux objets.
C’est le cas du gardien de deux objets.
Les collections sont des objets capables d’en contenir d’autres.
Les collections sont le principal champ d’application de la généricité.
Car elles peuvent contenir des objets de tous types, utilisables sans devoir transtyper depuis le type Object.
Dans l’exemple ci-dessus, l’avion hérite du véhicule, auquel il rajoute ses caractéristiques propres.
Un objet générique prévu pour contenir des véhicules ne peut pas contenir de descendants (avions) de ces véhicules.
Pour ce faire, il faut passer par une syntaxe avec un wildcard <?>
Exemple : List <? extends Vehicule> mesObjets2; //Accepte n’importe quoi qui descend de véhicule.