Прямое направление может быть выполнено с использованием метода Class.getEnumConstants()
:
public static <E extends Enum<E>> E getValue(Class<E> eClass, int index) {
return eClass.getEnumConstants()[index - 1];
}
Вызывается следующим образом:
SampleEnum2 two = getValue(SampleEnum2.class, 2);
(К сожалению, мы не можем написать универсальный метод, который использует метод values()
, который есть у каждого enum
. Он статический, поэтому мы не можем получить к нему доступ полиморфным способом. Для рефлексивного доступа к нему нам потребуется чтобы знать фактический класс E
... и для этого требуется объект Class<E>
. И если вам нужно передать его, вы также можете вызвать его метод getEnumConstants
.)
Обратное направление проще:
public static <E extends Enum<E>> int getIndex(E e) {
return e.ordinal() + 1;
}
Конечно, гораздо лучше, если вы следуете обычному IT-соглашению, когда индексы коллекции начинаются с нуля.