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]

で十分です。1行; 十分に簡単です。

于 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 に答える