34 votes

Comment obtenir la valeur numérique d'un enum ?

Supposons que vous ayez

public enum Week {
    SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
}

Comment peut-on obtenir int représentant que le dimanche est 0, le mercredi est 3, etc.

92voto

Istvan Devai Points 1923
Week week = Week.SUNDAY;

int i = week.ordinal();

Attention toutefois, cette valeur changera si vous modifiez l'ordre des constantes de l'enum dans la déclaration. Une façon de contourner ce problème est d'attribuer une valeur int à toutes vos constantes enum comme ceci :

public enum Week 
{
     SUNDAY(0),
     MONDAY(1)

     private static final Map<Integer,Week> lookup 
          = new HashMap<Integer,Week>();

     static {
          for(Week w : EnumSet.allOf(Week.class))
               lookup.put(w.getCode(), w);
     }

     private int code;

     private Week(int code) {
          this.code = code;
     }

     public int getCode() { return code; }

     public static Week get(int code) { 
          return lookup.get(code); 
     }
}

8voto

vainolo Points 5594

Vous pouvez appeler :

MONDAY.ordinal()

mais personnellement, j'ajouterais un attribut à l'attribut enum pour stocker la valeur, l'initialiser dans l'objet enum et ajoutez une fonction pour obtenir la valeur. C'est mieux car la valeur de MONDAY.ordinal peut changer si le enum Les constantes sont déplacées.

2voto

John Kane Points 3061

Jetez un coup d'œil à l'API c'est généralement un bon point de départ. Bien que je n'aurais pas deviné, sans avoir rencontré ce problème auparavant, que vous appelez ENUM_NAME.ordinal().

0voto

Ganesh Points 106

Oui, il suffit d'utiliser le ordinal de l'objet enum.

public class Gtry {
  enum TestA {
    A1, A2, A3
  }

  public static void main(String[] args) {
    System.out.println(TestA.A2.ordinal());
    System.out.println(TestA.A1.ordinal());
    System.out.println(TestA.A3.ordinal());
  }

}

API :

/**
     * Returns the ordinal of this enumeration constant (its position
     * in its enum declaration, where the initial constant is assigned
     * an ordinal of zero).
     *
     * Most programmers will have no use for this method.  It is
     * designed for use by sophisticated enum-based data structures, such
     * as {@link java.util.EnumSet} and {@link java.util.EnumMap}.
     *
     * @return the ordinal of this enumeration constant
     */
    public final int ordinal() {
        return ordinal;
    }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X