Метод ordinal()
возвращает порядковый номер экземпляра перечисления.
Как установить порядковый номер для перечисления?
Могу ли я указать порядковый номер для перечисления в Java?
Ответ 1
Вы не можете установить его. Он всегда является порядком постоянного определения. См. Документацию для Enum.ordinal():
Возвращает порядковый номер этой константы перечисления (ее позиция в объявлении перечисления, где исходной константе присваивается порядковый номер нуля). Большинство программистов не будут использовать этот метод. Он предназначен для использования сложными структурами данных на основе enum, такими как EnumSet и EnumMap.
И на самом деле - вам не нужно. Если вам нужно какое-то целочисленное свойство, определите его.
Ответ 2
Вы можете управлять порядком, изменяя порядок перечисления, но вы не можете его явно указать в C++
. Одним из способов является предоставление дополнительного метода в вашем перечислении для нужного номера:
enum Foo {
BAR(3),
BAZ(5);
private final int val;
private Foo(int v) { val = v; }
public int getVal() { return val; }
}
В этой ситуации BAR.ordinal() == 0
, но BAR.getVal() == 3
.
Ответ 3
Вы можете обновить порядковый номер с помощью отражения:
private void setEnumOrdinal(Enum object, int ordinal) {
Field field;
try {
field = object.getClass().getSuperclass().getDeclaredField("ordinal");
field.setAccessible(true);
field.set(object, ordinal);
} catch (Exception ex) {
throw new RuntimeException("Can't update enum ordinal: " + ex);
}
}
Ответ 4
Из http://download.oracle.com/javase/1.5.0/docs/api/java/lang/Enum.html
public final int orthinal() Возвращает порядковый номер этой константы перечисления (ее позиция в объявлении перечисления, где исходной константе присваивается порядковый номер нуля). Большинство программистов не будут использовать этот метод. Он предназначен для использования сложными структурами данных на основе enum, такими как EnumSet и EnumMap.
Возвращает: ординал этой константы перечисления
Если у вас
public enum День { ВОСКРЕСЕНЬЕ, ПОНЕДЕЛЬНИК, ВТОРНИК, СРЕДА, ЧЕТВЕРГ, ПЯТНИЦА, СУББОТА }
то SUNDAY имеет порядковый номер 0, MONDAY равен 1 и так далее...
Ответ 5
Как говорится в принятом ответе, вы не можете установить порядковый номер. Самое близкое к этому - это настраиваемое свойство:
public enum MonthEnum {
JANUARY(1),
FEBRUARY(2),
MARCH(3),
APRIL(4),
MAY(5),
JUNE(6),
JULY(7),
AUGUST(8),
SEPTEMBER(9),
OCTOBER(10),
NOVEMBER(11),
DECEMBER(12);
MonthEnum(int monthOfYear) {
this.monthOfYear = monthOfYear;
}
private int monthOfYear;
public int asMonthOfYear() {
return monthOfYear;
}
}
Ответ 6
Ознакомьтесь с примерами Java Enum и docs
Возвращает порядковый номер этой константы перечисления (ее позиция в объявлении перечисления, где исходной константе присваивается порядковый номер нуля). Большинство программистов не будут использовать этот метод. Он предназначен для использования сложными структурами данных на основе enum, такими как EnumSet и EnumMap.
Ответ 7
Легкий ответ: просто измените порядок констант. Первое задано будет 0, второе будет равно 1 и т.д. Однако это может быть нецелесообразным, если вы постоянно меняете код, или перечисления будут много разных значений. Вы можете определить настраиваемый метод для работы с порядковым номером по умолчанию, но УБЕДИТЕСЬ, что он хорошо документирован, чтобы избежать путаницы!
public enum Values
{
ONE, TWO, THREE, FOUR;
public int getCustomOrdinal()
{
if(this == ONE)
{
return 3;
}
else if(this == TWO)
{
return 0;
}
...
}
}