簡體   English   中英

從枚舉類型和序號中獲取枚舉值

[英]Get enum value from enum type and ordinal

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

假設field.getType().isEnum()true ,我將如何生成給定序數的枚舉值?

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

足夠了。 一條線; 夠直截了當。

ExampleTypeEnum value = ExampleTypeEnum.values()[ordinal]

要獲得所需內容,您需要調用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];
}

根據標題,建議

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

被調用

YourEnum enumVal = decode(YourEnum.class, ordinal)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM