2013-08-02 3 views
3

Что я имею в виду, что предполагаютЕсть ли способ получить тип перечисления и порядковое значение?

Enum xyzType { 

    A, 
    B, 
    C, 
    D 
} 

Я знаю, что я могу получить порядковое значение C, делая xyzType.C.ordinal(), который 2. Пусть я просто 2, я бы для получения типа перечисления типа C. Я не могу найти ничего в API перечисления, который бы это сделал. Я бы предпочел не иметь огромного оператора switch для сравнения каждого порядкового значения и возврата перечисления. Лучше ли это сделать?

+0

Вы имеете в виду тип перечисления, который является 'xyzType' или экземпляр перечисления' C' типа 'xyzType'? – chrylis

ответ

13

Самый простой подход:

xyzType xyz = xyzType.values()[ordinalValue]; 

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

public enum Xyz { 
    Foo, Bar; 

    private static final Xyz[] VALUES = values(); 

    public Xyz fromOrdinal(int ordinal) { 
     return VALUES[ordinal]; 
    } 
} 
+0

Спасибо, Джон, это именно то, что я искал. – tadpole

Смежные вопросы