To get what you want, you need to call YourEnum.values()[ordinal] . You can do this with reflection as follows:
public static <E extends Enum<E>> E decode(Field field, int ordinal) { try { Class<?> myEnum = field.getType(); Method valuesMethod = myEnum.getMethod("values"); Object arrayWithEnumValies = valuesMethod.invoke(myEnum); return (E) Array.get(arrayWithEnumValies, ordinal); } catch (NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { e.printStackTrace(); } return null; }
UPDATE
As @LouisWasserman noted in his comment, a much simpler way
public static <E extends Enum<E>> E decode(Field field, int ordinal) { return (E) field.getType().getEnumConstants()[ordinal]; }
Pshemo
source share