2017-05-21 16 views
0

実行時にJavaで実行時にHIGH(1),MEDIUM(2),LOW(3)などの列挙型フィールドを追加するにはどうすればよいですか?実行時にJavaでenumフィールドを追加する方法

public enum Status { 
    HIGH, 
    MEDIUM, 
    LOW; 
} 
+0

あなたは何を達成しようとしていますか? – OldProgrammer

+0

実行時に値を変更する必要がある場合は、ENUMを使用しないで、別の構造体をsetterメソッドなどのクラスとして使用しないでください。 –

+0

あなたはしません。あなたはこれで何を達成しようとしていますか? – chrylis

答えて

-1

これを行うには、反射を使用することをおすすめします。例えば

はこちらを参照してください。

/** 
* <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

仕事をして根性がこの方法です。代わりにセットを使用することを検討してください。

関連する問題