Java enum устанавливает пользовательские ординалы
На днях я попытался сделать это, но он не работает:
enum MyEnum {ONE = 1, TWO = 2}
к моему большому удивлению, он не компилируется!!! Как выбрать пользовательские ординалы???
Ответы
Ответ 1
Вы не можете. Ординалы фиксируются, начиная с 0 и заканчивая. Из документов для ordinal()
:
Возвращает порядковый номер этой константы перечисления (ее позиция в объявлении перечисления, где исходной константе присваивается порядковый номер нуля).
Вы не можете назначить свои собственные значения. С другой стороны, вы можете иметь свои собственные значения в перечислении:
public enum Foo {
ONE(1), TWO(2);
private final int number;
private Foo(int number) {
this.number = number;
}
public int getNumber() {
return number;
}
}
Ответ 2
Так вы можете сделать это вручную:
enum MyEnum {
ONE(1),
TWO(2);
private int val;
private MyEnum(int val) {
this.val = val;
}
}
Ответ 3
Порядок, в котором вы определяете перечисления, будет определять ординалы.
enum MyEnum {
Enum1, Enum2;
}
Здесь Enum1 будет иметь порядковый номер 1, а Enum2 будет иметь порядковый номер 2.
Но вы можете иметь настраиваемые свойства для каждого перечисления:
enum MyEnum {
Enum1(1), Enum2(2);
private int ord ;
MyEnum(int ord) {
this.ord = ord;
}
public int getOrd() {
return this.ord;
}
}