Get enum value from enum type and ordinal
11,184
Solution 1
field.getType().getEnumConstants()[ordinal]
suffices. One line; straightforward enough.
Solution 2
ExampleTypeEnum value = ExampleTypeEnum.values()[ordinal]
Solution 3
To get what you want you need to invoke YourEnum.values()[ordinal]
. You can do it with reflection like this:
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 pointed in his comment there is much simpler way
public static <E extends Enum<E>> E decode(Field field, int ordinal) {
return (E) field.getType().getEnumConstants()[ordinal];
}
Author by
Steve
Updated on July 27, 2022Comments
-
Steve almost 2 years
public <E extends Enum> E decode(java.lang.reflect.Field field, int ordinal) { // TODO }
Assuming
field.getType().isEnum()
istrue
, how would I produce the enum value for the given ordinal?