使用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
提交
取消