如何在 Java 中运行时添加枚举字段



如何在 Java 中运行时添加枚举字段,例如 HIGH(1)MEDIUM(2)LOW(3)

public enum Status {
    HIGH,
    MEDIUM,
    LOW;  
}
执行此操作

的最佳方法是使用反射。

有关示例,请参见此处:

http://www.jroller.com/VelkaVrana/entry/modify_enum_with_reflection

做这项工作的胆量是这样的方法:

/** 
 * <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);  
    }  
}  

不过,您真的不必在运行时修改枚举。也许考虑改用 Set ?

最新更新