Подтвердить что ты не робот

Как получить числовое значение перечисления?

Предположим, что у вас есть

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

Как получить int, представляющий, что воскресенье равно 0, среда 3 и т.д.?

4b9b3361

Ответ 1

Week week = Week.SUNDAY;

int i = week.ordinal();

Будьте осторожны, что это значение изменится, если вы измените порядок констант перечисления в объявлении. Один из способов обойти это - присвоить значение int всем вашим константам перечисления, как это:

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); 
     }
}

Ответ 2

Вы можете позвонить:

MONDAY.ordinal()

но лично я добавил атрибут enum для сохранения значения, инициализировал его в конструкторе enum и добавил функцию для получения значения. Это лучше, потому что значение MONDAY.ordinal может измениться, если перемещаются константы enum.

Ответ 3

Взгляните на API, это, как правило, достойное место для начала. Хотя я бы и не догадался, не столкнувшись с этим до этого, вы вызываете ENUM_NAME.ordinal()

Ответ 4

Да, просто используйте порядковый метод объекта перечисления.

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;
    }