Généricité
Retour sur java3 Utilisation de classes génériques Collections en JAVA ArrayList<E> Comment ça fonctionne en interne Equals Hashcode
Création de classe génériques Définition, Variable de Type : T Classe générique non instanciée truc<T> Classe générique instancié truc<String> Déclaration Class truc<T> { T attribut; }
Sous typage Alors truc<T> Sous <T> herite de truc<T> Sous<T> sous type de truc<T> Sous<String> sous type de truc<String>
attention La relation de sous-typage permet de définir quelles affectations sont bien typées. Si on avait Paire < Integer > hérite de Paire < Object > le programme suivant serait bien typé. Or il n’est clairement pas correct. class PasSousType1 { public static void main ( String [ ] args ) Paire <Integer> une Paire = new Paire <Integer>(12,45); Paire <Object> laMeme = unePaire; unePaire.setFirst(”archi”) ; }
Wildcards Pour compenser wildcards Idée : La variable type d’une classe generique hérite d’un type connu Exemple Integer hérite de Number ArrayList<Integer> n’herite pas de ArrayList<Number>
Wildcards (2) Une méthode qui attend une ArrayList<Number> ne peut donc prendre une ArrayList<Integer> Or on doit savoir faire l’opération de la méthode Déclarer la méthode comme attendant ArrayList<? extends Number>
Contrainte sur classe paramètre Types paramètrés contraints Idée : Je veux gérer des ensembles d’objets ayant une méthode donnée dans une interface Interface Si je declare avec un type générique Ex : truc<T> Je ne peux pas appeler la méthode sur T Il faut déclarer différemment Truc<T extends Interface>