Get enum value from enum type and ordinal

前端 未结 4 1195
小蘑菇
小蘑菇 2021-01-12 08:09
public  E decode(java.lang.reflect.Field field, int ordinal) {
    // TODO
}

Assumin

4条回答
  •  误落风尘
    2021-01-12 08:47

    To get what you want you need to invoke YourEnum.values()[ordinal]. You can do it with reflection like this:

    public static > 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 decode(Field field, int ordinal) {
        return (E) field.getType().getEnumConstants()[ordinal];
    }
    

提交回复
热议问题