我最近偶然发现了使用Java反射更改私有静态最终字段并测试了polygenelubricants的EverythingIsTrue类,工作正常,System.out.format("Everything is %s", false);打印Everything is true确实.但是当我改变代码时
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);
}
}
Run Code Online (Sandbox Code Playgroud)
它打印
Everything is false
Run Code Online (Sandbox Code Playgroud)
有人知道为什么吗?setFinalStatic实际上是否有效?
java ×1