相关疑难解决方法(0)

无法使用java反射更改静态最终字段?

我最近偶然发现了使用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

8
推荐指数
2
解决办法
1万
查看次数

标签 统计

java ×1