Puisque l'on t'a déjà répondu sur le warning (bien qu'en fait ton problème était que tu écrivais du 1.4 mais en compilant avec le 1.5 qui utilise par défaut la version 5.0 du language, il suffisait donc de choisir "1.4" comme niveau de compatibilité : javac 1.5 aurait arrêté de se plaindre et tu n'aurais pas eu à changer ta syntaxe pour virer les warnings), je te réponds sur l'utilisation des génériques.
L'utilisation des génériques permet au compilateur (et donc à toi-même) de faire plus de tests. Par exemple dans une List< Toto >, tu ne peux mettre que des Toto (avec une List, on pouvait mettre n'importe quoi). Ensuite, tu n'as plus à transtyper les objets que tu sors de ta liste puisque tu sais (et le compilateur aussi) que ce sont des Toto.
Exemple, avant :
List lst = new ArrayList();
lst.add(new Toto());
Toto t = (Toto)lst.elementAt(0);
lst.add(new String()); // c'est permis
Toto u = (Toto)lst.elementAt(1); // personne ne se plaint, sauf à l'exécution
après :
List< Toto > lst = new ArrayList< Toto >();
lst.add(new Toto());
Toto t = lst.elementAt(0);
lst.add(new String()); // ne compile pas !
Tu as aussi d'autres constructions intéressantes en 1.5, notamment le nouveau for :
Avant :
for (Iterator i = lst.iterator(); i.hasNext(); ) {
Toto t = (Toto)i.next();
...
}
maintenant :
for (Toto t : lst) {
...
}
et d'autres ajouts (annotations, api multi-thread augmentée, etc.).
# Génériques
Posté par Sylvain Sauvage . En réponse au message Generic en Java 5.0 et Eclipse. Évalué à 5.
L'utilisation des génériques permet au compilateur (et donc à toi-même) de faire plus de tests. Par exemple dans une List< Toto >, tu ne peux mettre que des Toto (avec une List, on pouvait mettre n'importe quoi). Ensuite, tu n'as plus à transtyper les objets que tu sors de ta liste puisque tu sais (et le compilateur aussi) que ce sont des Toto.
Exemple, avant :
List lst = new ArrayList();
lst.add(new Toto());
Toto t = (Toto)lst.elementAt(0);
lst.add(new String()); // c'est permis
Toto u = (Toto)lst.elementAt(1); // personne ne se plaint, sauf à l'exécution
après :
List< Toto > lst = new ArrayList< Toto >();
lst.add(new Toto());
Toto t = lst.elementAt(0);
lst.add(new String()); // ne compile pas !
Tu as aussi d'autres constructions intéressantes en 1.5, notamment le nouveau for :
Avant :
for (Iterator i = lst.iterator(); i.hasNext(); ) {
Toto t = (Toto)i.next();
...
}
maintenant :
for (Toto t : lst) {
...
}
et d'autres ajouts (annotations, api multi-thread augmentée, etc.).