devstory

Le Tutoriel de Java Enum

  1. Qu'est-ce que Java Enum?
  2. Peut utiliser l'opérateur == pour comparer les éléments d'énumération
  3. Enum en Java peut être utilisé comme un argument dans la déclaration switch
  4. Rechercher l'élément d'Enum
  5. Enum peut posséder le constructeur et la méthode
  6. Remplace la méthode en énumération
  7. La méthode abstraite dans Enum

1. Qu'est-ce que Java Enum?

enum en Java est un mot-clé, une caractéristique utilisée pour représenter le nombre fixe de valeurs bien connues en Java, par exemple le nombre de jours dans semaine, le nombre de planètes dans le système solaire, etc. L'énumération (Enum) en Java a été introduite dans JDK 1.5 et c'est l'une de mes fonctionnalités préférées de J2SE5 parmi Autoboxing et unboxing, Generics, varargs et static import.
Maintenant, nous voyons avant l'énumération, ce que java doit faire dans des situations spécifiques:
WeekDayConstants.java
package org.o7planning.tutorial.beforej5;

// This class defines the constants are the days of the week.
public class WeekDayConstants {
  public static final int MONDAY = 2;
  public static final int TUESDAY = 3;
  public static final int WEDNESDAY = 4;
  public static final int THURSDAY = 5;
  public static final int FRIDAY = 6;
  public static final int SATURDAY = 7;
  public static final int SUNDAY = 1;
}
Une classe avec une méthode renvoie le travail à effectuer chaque jour spécifique de la semaine. (Type d'horaire).
Timetable.java
package org.o7planning.tutorial.beforej5;

public class Timetable {
  // Returns name of Job will do
  public static String getJob(int dayInWeek) {
      if (dayInWeek == WeekDayConstants.SATURDAY
              || dayInWeek == WeekDayConstants.SUNDAY) {
          return "Nothing";
      }
      return "Coding";
  }
}
Il est évident que ces lignes de code ne sont pas sûres. Par exemple, vous appelez Timetable.getJob (int), mais le paramètre d'entrée n'appartient pas à un ensemble prédéfini.
  • Pas de type de sécurité: Tout d'abord, il n'est pas sûr de type; Vous pouvez passer toute valeur int valable à dayInWeek
  • Pas d'impression significative: la valeur d'impression de l'une de ces constantes imprimera sa valeur numérique au lieu d'un nom significatif du jour, par ex. Lorsque vous imprimez le lundi, il va imprimer "2" au lieu de "LUNDI"
Voir le code en Java5
WeekDay.java
package org.o7planning.tutorial.javaenum;

public enum WeekDay {
   MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;
}
Timetable.java
package org.o7planning.tutorial.javaenum;

public class Timetable {
  public static String getJob(WeekDay weekDay) {
      if (weekDay == WeekDay.SATURDAY || weekDay == WeekDay.SUNDAY) {
          return "Nothing";
      }
      return "Coding";
  }
}

2. Peut utiliser l'opérateur == pour comparer les éléments d'énumération

Enum est un objet de référence comme une classe, une interface, mais il peut également utiliser l'opération ==.
Voir comment les objets de référence sont comparés:
// To compare the reference object, generally used method equals (..)
Object obj1 = .... ;

// Comparing object with null, can use the == operator
if(obj1 == null)  {
 
}

Object obj2 = ....;
// Not null
if (obj1 != null)   {
   // Comparing two objects.
   if(obj1.equals(obj2))   {
       
   }
}
Avec Enum, vous pouvez utiliser l'opérateur == pour comparer.
CompareEnumDemo.java
package org.o7planning.tutorial.javaenum;

public class CompareEnumDemo {
  public static void main(String[] args) {
      WeekDay today = WeekDay.SUNDAY;
      // Use the == operator to compare two elements of Enum
      if (today == WeekDay.SUNDAY) {
          System.out.println("Today is Sunday");
      }
  }
}

3. Enum en Java peut être utilisé comme un argument dans la déclaration switch

Comme les types de données primitifs (int, float, ...) Enum peut être utilisé comme paramètre dans l'instruction switch.
Voyons un exemple:
SwitchDemo.java
package org.o7planning.tutorial.javaenum;

public class SwitchDemo {
   public static void main(String[] args) {
       WeekDay day = WeekDay.THURSDAY;
       switch (day) {
       case MONDAY:
           System.out.println("Working day");
           break;
       case SATURDAY:
       case SUNDAY:
           System.out.println("Holiday");
           break;
       default:
           System.out.println(day);
       }
   }
}

4. Rechercher l'élément d'Enum

Nous pouvons récupérer tous les éléments d'Enum, en utilisant les valeurs de méthode values(). Voir les exemples:
ValuesDemo.java
package org.o7planning.tutorial.javaenum;

public class ValuesDemo {
   public static void main(String[] args) { 
       // Get all the elements of the Enum.
       WeekDay[] allDays = WeekDay.values();
       for (WeekDay day : allDays) {
           System.out.println("Day: " + day);
       }
   }
}
Résultats de l'exécution l'exemple:
Day: MONDAY
Day: TUESDAY
Day: WEDNESDAY
Day: THURSDAY
Day: FRIDAY
Day: SATURDAY
Day: SUNDAY

5. Enum peut posséder le constructeur et la méthode

Une Enum peut avoir des constructeurs et des méthodes. Les constructeurs uniquement pour initialiser l'objet dans l'énumération, ne peuvent pas appeler à l'extérieur. Nous voyons une illustration:
Gender.java
package org.o7planning.tutorial.javaenum;

public enum Gender { 
   // Initialize the elements from Constructor.
   // The element is always final, static
   MALE("M", "Male"), FEMALE("F", "Female");
   private String code;
   private String text;

   // Constructor of Enum internal use only
   // Modifier of constructor is private
   // If you do not declare private, java alway understand is private.    
   private Gender(String code, String text) {
       this.code = code;
       this.text = text;
   } 
   // Static method return Gender by code.
   public static Gender getGenderByCode(String code) {
       for (Gender gender : Gender.values()) {
           if (gender.code.equals(code)) {
               return gender;
           }
       }
       return null;
   }
   public String getCode() {
       return code;
   }
   public void setCode(String code) {
       this.code = code;
   } 
   public String getText() {
       return text;
   }
   public void setText(String text) {
       this.text = text;
   }
}
GenderDemo.java
package org.o7planning.tutorial.javaenum;

public class GenderDemo {
  public static void main(String[] args) {
      Gender marryGender = Gender.FEMALE;
      System.out.println("Code: " + marryGender.getCode());
      System.out.println("Text: " + marryGender.getText());

      // Gender[].
      for (Gender gender : Gender.values()) {
          System.out.println(gender.getText());
      } 
      String code ="M";
      Gender gender= Gender.getGenderByCode(code);
      System.out.println("Gender by code: "+ gender);
  }
}
Résultats de l'exécution de l'exemple:
Code: F
Text: Female
Male
Female
Gender by code: MALE

6. Remplace la méthode en énumération

Vous pouvez remplacer la méthode toString() héritée de la classe Object.
Currency.java
package org.o7planning.tutorial.javaenum;

public enum Currency {
  VND, USD, EURO ;

  @Override
  public String toString() {
      if (this == VND) {
          return "Dong";
      } else if (this == USD) {
          return "Dola";
      }
      return super.toString();
  }
  public static void main(String[] args) {
      Currency money = Currency.USD;
      System.out.println("Money " + money);
      System.out.println("Money " + money.toString());
      System.out.println("VND " + Currency.VND);
      System.out.println("EURO " + Currency.EURO);
  }
}
Résultats de l'exécution l'exemple:
Money Dola
Money Dola
VND Dong
EURO EURO

7. La méthode abstraite dans Enum

Color.java
package org.o7planning.tutorial.javaenum;

public enum Color {
  RED("red") {
      @Override
      public String getHexCode() {
          return "#ff0000";
      }
  },
  GREEN("green") {
      @Override
      public String getHexCode() {
          return "#00ff00";
      }
  },
  BLUE("blue") {
      @Override
      public String getHexCode() {
          return "#0000ff";
      }
  };
  private String name;
  Color(String name) {
      this.name = name;
  }
  public String getName() {
      return name;
  } 
  public abstract String getHexCode();
}

Java Basic

Show More