我最近偶然發現了Change private static final field using Java reflection和測試的polygenelubricants'EverythingIsTrue
類,工作正常,System.out.format("Everything is %s", false);
打印Everything is true
確實。但是,當我改變代碼爲無法使用java反射更改靜態最終字段?
public class EverythingIsTrue {
public static final boolean FALSE = false;
static void setFinalStatic(Field field, Object newValue) throws Exception {
field.setAccessible(true);
Field modifiersField = Field.class.getDeclaredField("modifiers");
modifiersField.setAccessible(true);
modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
field.set(null, newValue);
}
public static void main(String[] args) throws Exception {
setFinalStatic(EverythingIsTrue.class.getField("FALSE"), true);
System.out.format("Everything is %s", FALSE);
}
}
它打印
Everything is false
有誰知道爲什麼嗎? setFinalStatic實際上是否工作?
這是完全一樣的答案,因爲我的 - 只能用更多的話! – dty
@dty它看起來像是無限的更多的單詞;) –
我刪除了我的答案,因爲你的答案已經被接受了,而我的答案並沒有增加任何價值 - 只是簡潔! ;-) – dty