Un type énuméré permet de définir un ensemble d'identificateurs pour des constantes ; il peut permettre par exemple de définir l'ensemble : LUNDI, MARDI, ... pour les jours de la semaine. Jusqu'à la version 5.0, le langage Java ne permettait pas de définir un tel type. Avec le JDK 5.0, on peut définir des types énumérés à l'aide de classes. Ces classes diffèrent des classes traditionnelles ; en particulier, leur en-tête commence par le mot enum à la place du mot class. Nous donnons deux exemples. Le premier est suffisant pour un usage simple d'un type énuméré et le second permet de mieux comprendre ce type et ses possibilités.
La classe Jour du premier exemple consiste uniquement en une énumération d'identificateurs pour les jours de la semaine. Cette énumération doit nécessairement être en première ligne (sauf d'éventuels commentaires) de la définition de la classe. Une méthode main utilise la classe Jour ; on y utilise une instruction par cas selon les jours de la semaine.
public enum Jour {Pour la commande java EssaiJour SAMEDI, on obtient :
LUNDI, MARDI, MERCREDI, JEUDI, VENDREDI, SAMEDI, DIMANCHE;
}
class EssaiJour {
public static void main(String[] arg) {
Jour jour = Jour.valueOf(arg[0]);
if (jour == Jour.SAMEDI) System.out.print("fin de semaine : ");
switch(jour) {
case SAMEDI :
case DIMANCHE :
System.out.println("se reposer");
break;
default :
System.out.println("travailler");
break;
}
}
}
Les classes pour les types
énumérés
étendent toujours la classe java.lang.Enum,
sans que cela figure explicitement. En conséqence, puisque
Java ne permet pas l'héritage multiple, une telle classe ne
peut pas étendre une autre classe .
Les éléments
énumérés ne sont rien d'autres que des
instances de la classe enum
concernée
public enum JourPlus {Pour la commande java EssaiJourPlus, on obtient :
LUNDI(8), MARDI(8), MERCREDI(4), JEUDI(8), VENDREDI(7), SAMEDI(0), DIMANCHE(0);
private int nbHeures;
public JourPlus(int nb) {
nbHeures = nb;
}
public int getNbHeures() {
return nbHeures;
}
public String action() {
switch(this) {
case SAMEDI : return "cinema";
case DIMANCHE : return "dormir";
default : return "travailler";
}
}
}
class EssaiJourPlus {
public static void main(String[] arg) {
JourPlus unJour = JourPlus.SAMEDI;
System.out.println("numero de " + unJour + " : " + unJour.ordinal());
System.out.println(unJour + " : " + unJour.action());
for (JourPlus jour : JourPlus.values())
System.out.println("nombre d'heures de " + jour + " : " + jour.getNbHeures());
}
}
numero de SAMEDI : 5
SAMEDI : cinema
nombre d'heures de LUNDI : 8
nombre d'heures de MARDI : 8
nombre d'heures de MERCREDI : 4
nombre d'heures de JEUDI : 8
nombre d'heures de VENDREDI : 7
nombre d'heures de SAMEDI : 0
nombre d'heures de DIMANCHE : 0