Java设置静态最终字符串字段的值

时间:2014-11-10 20:09:08

标签: java reflection

我试图用这个: Change private static final field using Java reflection 为了设置静态+最终字段:

import java.lang.reflect.Field;
import java.lang.reflect.Modifier;

public class Test {
    public static final String TEST = "hello";

    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(Test.class.getField("TEST"), "world");

        System.out.println(Test.class.getField("TEST").get(null));
        System.out.println(Test.TEST);
    }
}

上面的代码显示: 世界 喂

这怎么可能?

编辑: 这个Change private static final field using Java reflection解释了为什么它的行为方式,但有不同的方式继续进行,以便System.out.println(Test.TEST);打印“世界”?

0 个答案:

没有答案