Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从枚举类型和序号中获取枚举值 public E解码(java.lang.reflect.Field,int-ordinal){ //待办事项 }_Java_Reflection_Enums - Fatal编程技术网

从枚举类型和序号中获取枚举值 public E解码(java.lang.reflect.Field,int-ordinal){ //待办事项 }

从枚举类型和序号中获取枚举值 public E解码(java.lang.reflect.Field,int-ordinal){ //待办事项 },java,reflection,enums,Java,Reflection,Enums,假设field.getType().isEnum()为true,我将如何为给定序号生成枚举值?要获得所需的值,需要调用YourEnum.values()[ordinal]。您可以通过反射这样做: ExampleTypeEnum value = ExampleTypeEnum.values()[ordinal] public static <E extends Enum<E>> E decode(Field field, int ordinal) { try {

假设
field.getType().isEnum()
true
,我将如何为给定序号生成枚举值?

要获得所需的值,需要调用
YourEnum.values()[ordinal]
。您可以通过反射这样做:

ExampleTypeEnum value = ExampleTypeEnum.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;
}
公共静态E解码(字段,整数顺序){
试一试{
类myEnum=field.getType();
方法值Method=myEnum.getMethod(“值”);
Object arrayWithEnumValies=valuesMethod.invoke(myEnum);
return(E)Array.get(arrayWithEnumValies,序号);
}catch(NoSuchMethodException | SecurityException
|IllegalAccessException | IllegalArgumentException
|调用目标异常(e){
e、 printStackTrace();
}
返回null;
}
更新 正如@LouisWasserman在他的评论中指出的,有一种更简单的方法

public static <E extends Enum<E>> E decode(Field field, int ordinal) {
    return (E) field.getType().getEnumConstants()[ordinal];
}
公共静态E解码(字段,整数顺序){
返回(E)字段。getType().getEnumConstants()[ordinal];
}

够了。一行;很简单。

根据标题,建议

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

字段
不是枚举。我已经更新了这个问题来澄清这一点,尽管我认为从标记中可以看出这一点。请参阅有问题的注释。是的,我不认为我能通过像
return(Enum[])field.getType().getMethod(“values”).invoke(null))[ordinal]。这并不重要,但类型应该更简单:
field.getType().getEnumConstants()[ordinal]
@LouisWasserman如果您将您的评论移动到某个答案,我将接受该答案,因为这显然是最好的答案。@SteveTaylor,但整个表达式在
字段和
类的范围内
public <E extends Enum> E decode(Class<?> enumType, int ordinal) 
{
   return enumType.getEnumConstants()[ordinal];
}
YourEnum enumVal = decode(YourEnum.class, ordinal)