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