public <E extends Enum> E decode(java.lang.reflect.Field field, int ordinal) {
// TODO
}
が であると仮定するfield.getType().isEnum()
とtrue
、指定された序数の列挙値をどのように生成しますか?
public <E extends Enum> E decode(java.lang.reflect.Field field, int ordinal) {
// TODO
}
が であると仮定するfield.getType().isEnum()
とtrue
、指定された序数の列挙値をどのように生成しますか?
field.getType().getEnumConstants()[ordinal]
で十分です。1行; 十分に簡単です。
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];
}