我試圖修改私人最終靜態變量像this:失敗修改私人最終靜態變量無一例外
...try {
Field f =TargetA.class.getDeclaredField("RECV_TIMEOUT");
f.setAccessible(true);
Field modifiersField = Field.class.getDeclaredField("modifiers");
modifiersField.setAccessible(true);
modifiersField.setInt(f, f.getModifiers() & ~Modifier.FINAL);
f.set(null, 12L);
} catch (Exception e) {
e.printStackTrace();//not reach here!
} ...
class TargetA{
private static final long RECV_TIMEOUT = 180000L;
}
然而TargetA.RECV_TIMEOUT
仍然是180000L,沒有任何異常。 我在StackOverflow中搜索了問題,但找不到解決方案。
我猜Java版本1.6在反射中有更多限制,這會破壞OO規則。 感謝您的諮詢!