public <E extends Enum> E decode(java.lang.reflect.Field field, int ordinal) {
// TODO
}
假设field.getType().isEnum()
为true
,我将如何为给定的序数生成枚举值?
答案 0 :(得分:15)
field.getType().getEnumConstants()[ordinal]
就足够了。一条线;直截了当。
答案 1 :(得分: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];
}
答案 2 :(得分:2)
ExampleTypeEnum value = ExampleTypeEnum.values()[ordinal]
答案 3 :(得分:0)
根据标题,建议
List<String> someList = ['1', '2', '3', '4'];
final String firstString = someList.removeAt(0);
final String restString = someList.join(' ');
print(firstString); // 1
print(restString); // 2 3 4
由
呼叫public <E extends Enum> E decode(Class<?> enumType, int ordinal)
{
return enumType.getEnumConstants()[ordinal];
}