Reflection. Change private static final field

From AsIsWiki
Jump to: navigation, search

Reflection


Change private static final field

Источник


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

public class Main {

    public static void main(String args[]) throws Exception {

        System.out.println(A.getStr());

        setFinalStatic(A.class.getDeclaredField("str"), "321");

        System.out.println(A.getStr());
    }

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

class A {

    private static final String str = new String("123");

    public static String getStr() {
        return str;
    }
}



Reflection

Personal tools
Namespaces

Variants
Actions
Navigation
Tools