我使用的方法水溼新的值設置爲私有靜態最終地圖
static void setFinalStatic(Field field, Object newValue) throws Exception
{
field.setAccessible(true);
final Field modifiersField = Field.class.getDeclaredField("modifiers");
modifiersField.setAccessible(true);
modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
field.set(null, newValue);
}
改變private static final
領域。
但是,如果字段的類型Map
我得到異常
Exception in thread "main" java.lang.IllegalAccessException: Can not set static final java.util.Map field org.hibernate.type.TypeFactory.BASIC_TYPES to java.util.HashMap
at sun.reflect.UnsafeFieldAccessorImpl.throwFinalFieldIllegalAccessException(UnsafeFieldAccessorImpl.java:55)
at sun.reflect.UnsafeFieldAccessorImpl.throwFinalFieldIllegalAccessException(UnsafeFieldAccessorImpl.java:59)
at sun.reflect.UnsafeQualifiedStaticObjectFieldAccessorImpl.set(UnsafeQualifiedStaticObjectFieldAccessorImpl.java:59)
at java.lang.reflect.Field.set(Field.java:657)
at com.company.tester.Main.setFinalStatic(Main.java:64)
什麼想法?
更多的代碼
Field types = TypeFactory.class.getDeclaredField("BASIC_TYPES");
types.setAccessible(true);
Map val = (Map) types.get(null);
Map newMap = new HashMap(val);
newMap.put(String.class.getName(), new MyType());
setFinalStatic(TypeFactory.class.getDeclaredField("BASIC_TYPES"), new HashMap());
爲什麼你想這樣做?聽起來很討厭我。 – 2012-08-08 12:40:53
使用standart hibernate API我不能做我想要的 – Ilya 2012-08-08 12:43:35