Nicht ändern kann static final-Feld mit Hilfe der java reflection?

Ich vor kurzem gestolpert Ändern private static final-Feld mit Hilfe der Java reflection und getestet polygenelubricants' EverythingIsTrue Klasse, funktioniert einwandfrei, System.out.format("Everything is %s", false); Drucke Everything is true in der Tat. Aber wenn ich den code wie

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);
    }
}

druckt es

Everything is false

Weiß jemand warum? Tut setFinalStatic eigentlich funktionieren oder nicht?

InformationsquelleAutor Evgeniy Dorofeev | 2012-12-31

Schreibe einen Kommentar