Chap12
Le JDK 1.5
1
Quelques nouveautés:
–
Généricité
–
Nouvelle forme syntaxique pour for
–
Emballage/déballage pour les enveloppes de types primitifs
–
Méthodes avec un nombre variable d’arguments
–
Formatage des entrées(/sorties)
2
Généricité
Retour sur les classes de collections
Les classes de collections Java manipulent des objets du type le plus général: Object
–
–
Avantage: souplesse
Inconvénients: viennent du fait que l'on est souvent amené à manipuler des collections d'objets d'un type spécifique.
Exemple: une liste d'étudiants
List l=new ArrayList();
Etudiant e=new Etudiant();
l.add(e);
... for (Iterator it=l.iterator();it.hasNext();){ e=(Etudiant) it.next();
e.affiche();
}
Que se passe-t-il:
– si on oublie de caster ?
– si l contient autre chose que des étudiants ?
3
Solution (avant JDK 5.0)
Ecrire une classe spéciale pour chaque collection d'un type donné.
Exemple (suite): pour Etudiant, on définit une classe
ListeEtudiant qui utilise un délégué de type List class ListeEtudiant{ private List l;
…
public boolean ajouteEtudiant(Etudiant e){
…
}
…
// + implementation d'un mécanisme d'itération
}
Problème: on doit tout réecrire pour chaque nouveau type. On aimerait pouvoir définir un « patron » de classe avec un paramètre de type E que l’on pourrait instancier par le type d’objets qui nous intéresse.
4
Généricité
(JDK 1.5)
Possibilité d'écrire du code utilisant des paramètres de type. Solution Java: proche des templates du C++
Exemple (suite):
Nouvelle classe de collection: ArrayList<E>
– classe/type générique.
– E: paramètre formel de type.
On peut ensuite instancier la classe avec le type qui nous intéresse:
ArrayList<Etudiant>=new ArrayList<Etudiant>( );
Définit un type « liste d'objets de type Etudiant»
5
Avant:
List l=new ArrayList();
Etudiant e=new Etudiant();
l.add(e);
... for (Iterator it=l.iterator();it.hasNext();){ e=(Etudiant) it.next();
e.affiche();
}
Avec les classes génériques:
List<Etudiant> l=new