Exemple des énumérations java: ValueOf, toString, Switch, compareTo

Le type enum en java est un type de données spécial qui vous permet de déclarer des variables constantes. En java, le mot clé de déclaration d'un type énuméré est enum.

Exemple de enum

On veut déclarer une variable de type enum avec cinq moteurs de recherche:

public enum moteursDeRecherche{Google, Yahoo, Bing, Exhead, Baidu};
La virgule à la fin est facultatif, les deux écritures sont légales.
Vous pouvez accéder aux constantes :

moteursDeRecherche moteur = moteursDeRecherche.Google;
Toutes les énumérations héritent de la classe java.lang.Enum parce que une classe ne peut hériter que d'un seul parent mais de plusieurs interfaces.

Le type énuméré est un outil puissant puisqu'il définie une classe ou un interface qu'on peut mettre des méthodes et des attributs dedans. Par défaut, le compilateur ajoute des méthodes comme la méthode values() qui retourne un tableau contenant les valeurs dans l'ordre de leur déclaration.

Parcourir avec l'itération for

La méthode statique values() est utile dans le cas d'un parcours par exemple:

for( moteursDeRecherche moteur: moteursDeRecherche.values()) {
     System.out.println(moteur);
}

Attributs et méthodes

Un type enum peut contenir des constructeurs, des méthodes, des variables et des constantes.Vous pouvez initialiser les constantes avec la valeur qui doit être passée comme argument dans un constructeur.

public class EnumExemple {

public enum moteursDeRecherche{
Google(160), Yahoo(66.4f), Bing(7.f), Baidu(66), Ask(4.6f);
private float visiteurs;

private moteursDeRecherche(float visiteurs) {
this.visiteurs = visiteurs;
}
}

public static void main(String[] args) {
for( moteursDeRecherche moteur : moteursDeRecherche.values()) {
System.out.println("Moteur de recherche: "+moteur+"
visiteurs: "+moteur.visiteurs+" millions");
}
}
}
Sortie:

Moteur de recherche: Google visiteurs: 160.0 millions
Moteur de recherche: Yahoo visiteurs: 66.4 millions
Moteur de recherche: Bing visiteurs: 7.0 millions
Moteur de recherche: Baidu visiteurs: 66.0 millions
Moteur de recherche: Ask visiteurs: 4.6 millions
Les constantes sont déclarées static et final et ne peuvent pas être modifiées une fois qu'elles sont crées.

La comparaison d'égalité entre deux énumérations

La comparaison se fait avec la méthode equals() ou avec l'opérateur '==' et les deux donnent le même résultat donc vous avez la possibilité de choisir.

moteursDeRecherche google = moteursDeRecherche.Google;
if(google.equals(moteursDeRecherche.Google))
System.out.println("comparaison avec equals");
if(google == moteursDeRecherche.Google)
System.out.println("comparaison avec ==");

L'instruction Switch

public class EnumExemple{

public enum moteursDeRecherche{
Google(160), Yahoo(66.4f), Bing(7.f), Baidu(66), Ask(4.6f);
private float visiteurs;

private moteursDeRecherche(float visiteurs) {
this.visiteurs = visiteurs;
}
}

moteursDeRecherche nom;

public EnumExemple(moteursDeRecherche nom){
this.nom=nom;
}

public void slogan() {
switch (nom) {
case Google:
System.out.println("Ne soyez pas malveillant, ne faites pas le mal");
break;
case Yahoo:
System.out.println("Yahoo! It's You. Do you Yahoo?");
break;
case Bing:
System.out.println("Bing is for doing.");
break;
case Baidu:
System.out.println("Baidu connaît mieux le chinois");
break;
case Ask:
System.out.println("Quelle est ta question?");
break;
}
}

public static void main(String[] args) {
EnumExemple google = new EnumExemple(moteursDeRecherche.Google);
google.slogan();
EnumExemple yahoo = new EnumExemple(moteursDeRecherche.Yahoo);
yahoo.slogan();
EnumExemple bing = new EnumExemple(moteursDeRecherche.Bing);
bing.slogan();
EnumExemple baidu = new EnumExemple(moteursDeRecherche.Baidu);
baidu.slogan();
EnumExemple ask = new EnumExemple(moteursDeRecherche.Ask);
ask.slogan();
}
}
Vous ne pouvez pas créer une instance de enum avec le mot clé new parce que le constructeur est déclaré private et est créé pendant l’exécution. Même si vous ne le définissez pas comme étant private, il est toujours considéré comme private.

toString et ValueOf

toString retourne le nom de la constante:

System.out.println(yahoo.toString());
La fonction valueOf() fait le traitement inverse de la méthode toString(), on lui donne le nom et elle nous retourne la constante:

System.out.println(yahoo.valueOf("Yahoo"));

compareTo

Cette fonction sert à comparer deux énumérations et retourne -1, 0, 1 si cet objet est inférieur, égale ou supérieur respectivement.

System.out.println(google.compareTo(yahoo));
La console affiche -1 parce que "google" est déclaré avant "yahoo".

Ce qu'il faut retenir:
  • Déclaration facile des constantes et les valeurs reliées.
  • Les énumérations hérite de la classe java.lang.Enum.
  • Les énumérations ne peuvent pas implémenter des interfaces.
  • Les énumérations ne peuvent pas hériter des classes.
  • Les méthodes et les variables peuvent être déclarées comme dans la classe.
  • Les variables et les constructeurs sont déclarés private.
  • Permettre de comparer deux énumérations en utilisant la méthode compareTo().
  • Les énumérations sont utilisées avec l'instruction Switch.
Références: