Предположим, что у вас есть
public enum Week {
SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
}
Как получить int
, представляющий, что воскресенье равно 0, среда 3 и т.д.?
Предположим, что у вас есть
public enum Week {
SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
}
Как получить int
, представляющий, что воскресенье равно 0, среда 3 и т.д.?
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);
}
}
Вы можете позвонить:
MONDAY.ordinal()
но лично я добавил атрибут enum
для сохранения значения, инициализировал его в конструкторе enum
и добавил функцию для получения значения. Это лучше, потому что значение MONDAY.ordinal
может измениться, если перемещаются константы enum
.
Взгляните на API, это, как правило, достойное место для начала. Хотя я бы и не догадался, не столкнувшись с этим до этого, вы вызываете ENUM_NAME.ordinal()
Да, просто используйте порядковый метод объекта перечисления.
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;
}