8
public <E extends Enum> E decode(java.lang.reflect.Field field, int ordinal) {
    // TODO
}

假设field.getType().isEnum()true,我将如何产生给定序数的枚举值?

4

4 回答 4

21
field.getType().getEnumConstants()[ordinal]

就够了。一条线; 足够直截了当。

于 2012-12-14T06:04:12.173 回答
4
ExampleTypeEnum value = ExampleTypeEnum.values()[ordinal]
于 2012-12-14T01:54:49.147 回答
3

要得到你想要的,你需要调用YourEnum.values()[ordinal]. 你可以用这样的反射来做到这一点:

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;
}

更新

正如@LouisWasserman 在他的评论中指出的那样,有更简单的方法

public static <E extends Enum<E>> E decode(Field field, int ordinal) {
    return (E) field.getType().getEnumConstants()[ordinal];
}
于 2012-12-14T02:08:49.570 回答
0

根据标题,建议

public <E extends Enum> E decode(Class<?> enumType, int ordinal) 
{
   return enumType.getEnumConstants()[ordinal];
}

被调用

YourEnum enumVal = decode(YourEnum.class, ordinal)
于 2020-05-09T13:23:38.490 回答