Java 5 5 Lionel Seinturier
2. Auto-boxing
• faire en sorte qu'il n'y ait plus de différences entre les types
primitifs et leurs équivalents objet
– int, float, double, long, short, byte, boolean
– java.lang. Integer, Float, Double, Long, Short, Byte, Boolean
Java 1.4
Integer i = new Integer(12);
int ii = i.intValue() + 1;
Integer iii = new Integer(ii);
Java 5
Integer i = 12;
int ii = i + 1;
Integer iii = ii;
Java 5 6 Lionel Seinturier
3. Types énumérés
• pouvoir définir des types dont les valeurs sont prises dans un ensemble donné
Java 1.4
• définition d'un type scalaire (ex. int)
• définition de constantes correspondant aux ≠cas
• inconvénient
– pas de garantie qu'une valeur non légale ne soit pas utilisée
• il faut systématiquement vérifié la légalité des valeurs
¾en pratique, pas fait …
Java 5
• mot-clé enum
enum <identifiant> { <liste de valeur> };
ex. : enum Color { RED, BLUE, GREEN, BLACK, WHITE };
Java 5 7 Lionel Seinturier
3. Types énumérés
• utilisation "comme un type"
Color myColor = Color.RED;
System.out.println( myColor );
• méthodes prédéfinies pour chaque type enum
– toString() : représentation sous forme de chaîne de la valeur
– values() : un tableau de toutes les valeurs
– valueOf(String) : retourne la valeur correspondant au paramètre (ou
IllegalArgumentException)
• enum définit un nouveau type (au même titre que class ou interface)
• mêmes règle de typage, introspection, …
• le compilateur génère une classe pour chaque type enum
– autant d'attributs que de valeurs énumérées (RED, …)
– les méthodes values, valueOf, toString
– la classe java.lang.Enum comme super-classe
Java 5 8 Lionel Seinturier
3. Types énumérés
La classe java.util.EnumSet
• permet de définir des ensembles de valeurs énumérées
– par dénombrement : EnumSet.of(…)
– par complément : EnumSet.complementOf(…)
– par intervalle : EnumSet.range(…)
EnumSet<Color> esc = null;
esc = EnumSet.of( Color.BLUE, Color.BLACK );
esc = EnumSet.complementOf(esc);
esc = EnumSet.range( Color.BUE, Color.BLACK );
esc = EnumSet.noneOf(Color.class); // EnumSet vide