使用Java反射更改私有靜態最終字段我有一節課private static final很不幸,我需要在運行時更改它。使用反射,我得到了以下錯誤:java.lang.IllegalAccessException: Can not set static final boolean field有沒有辦法改變這個值?Field hack = WarpTransform2D.class.getDeclaredField("USE_HACK");hack.setAccessible(true);hack.set(null, true);
4 回答

慕斯709654
TA貢獻1840條經驗 獲得超5個贊
static final boolean
String
如果字段是一個常量變量(§4.12.4),那么刪除關鍵字Final或更改其值不會導致它們不運行而破壞與現有二進制文件的兼容性,但是 除非重新編譯,否則它們將不會看到使用該字段的任何新值。即使使用本身不是編譯時常量表達式,也是如此(§15.28)
class Flag { static final boolean FLAG = true;}class Checker { public static void main(String... argv) { System.out.println(Flag.FLAG); }}
Checker
Flag.FLAG
true
0: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream;
3: iconst_1
4: invokevirtual #3; //Method java/io/PrintStream.println:(Z)V
7: return
添加回答
舉報
0/150
提交
取消