Java 1.5
Mais ce que je veux dire c'est que ce n'est pas une transposition des enums du C/C++ ;)
Les Templates correspondent à une sorte de surcouche du langage. Grosso-modo c'est comme si tu faisait un gros replace sur le code avant chaque utilisation d'un type template :arrow: En fait c'est le compilateur qui le fait à ta place...
Les Generics sont véritablement intégré dans le langage (la reflection permet de récupérer certaines infos relatives aux Generics), et évites la duplication du code (toutes les classes Generics sont du même types).
Le gros défaut actuel étant que le type du paramétrage est perdu à l'exécution (sauf dans certains cas spécifique) puisque chaque instance d'un type paramétré appartient au même type (une List<String> est strictement du même type qu'une List<Integer>).
Sans oublier les notions de variances qui apportent encore plus de généricité au code (j'y reviens plus bas).
A mon avis cela apporte autant que les classes en comparaison des simples structures ;)
Le détail le plus utile c'est qu'une enum possède un
toString() bien propre, si bien que ceci affichera le libellé de l'enum et non pas une valeur entière peu utile :
Code:
System.out.println( monEnum );
Mais on a également la possibilité de parcourir facilement les valeurs d'une enum voir de faire la conversion String -> enum :
Code:
1 2 3 4
| for (MyEnum e : MyEnum.values()) {
System.out.println(e);
}
MyEnum.valueOf("A"); // retourne MyEnum.A |
Sans compter les méthodes associé à une valeur de l'
enum. Un petit exemple dans l'API standard avec
TimeUnit :
http://javasearch.developpez.com/j2s.../TimeUnit.html