0
実行時にJavaで実行時にHIGH(1)
,MEDIUM(2)
,LOW(3)
などの列挙型フィールドを追加するにはどうすればよいですか?実行時にJavaでenumフィールドを追加する方法
public enum Status {
HIGH,
MEDIUM,
LOW;
}
実行時にJavaで実行時にHIGH(1)
,MEDIUM(2)
,LOW(3)
などの列挙型フィールドを追加するにはどうすればよいですか?実行時にJavaでenumフィールドを追加する方法
public enum Status {
HIGH,
MEDIUM,
LOW;
}
これを行うには、反射を使用することをおすすめします。例えば
はこちらを参照してください。/**
* <b>Experimental and too much related to internal java implementation - use on your own risk</b>
*/
public static void setStaticFieldValue(final Class beanClass, final String fieldName,
final Object newValue) throws NoSuchFieldException, IllegalAccessException, NoSuchMethodException, InvocationTargetException {
// TODO: find some better way how to change static field
Field field = getField(beanClass, fieldName);
boolean accessible = field.isAccessible();
field.setAccessible(true);
try {
FieldAccessor fieldAccessor = (FieldAccessor) invokeMethod(field, "getFieldAccessor", new Class[]{
Object.class
}, new Object[]{
beanClass
});
Object isReadOnly = getFieldValue(fieldAccessor, "isReadOnly");
try {
setFieldValue(fieldAccessor, "isReadOnly", false);
//field.set(beanClass, newValue);
fieldAccessor.set(beanClass, newValue);
} finally {
setFieldValue(fieldAccessor, "isReadOnly", isReadOnly);
}
} finally {
field.setAccessible(accessible);
}
}
あなたは本当にかかわらず、実行時に列挙型を変更する必要はありません。
http://www.jroller.com/VelkaVrana/entry/modify_enum_with_reflection
仕事をして根性がこの方法です。代わりにセットを使用することを検討してください。
あなたは何を達成しようとしていますか? – OldProgrammer
実行時に値を変更する必要がある場合は、ENUMを使用しないで、別の構造体をsetterメソッドなどのクラスとして使用しないでください。 –
あなたはしません。あなたはこれで何を達成しようとしていますか? – chrylis