Reflection. Change private static final field

From AsIsWiki
(Difference between revisions)
Jump to: navigation, search
(Created page with "<div style='max-width:700px;text-align:justify;'> Reflection ==Change private final field== [http://stackoverflow.com/questions/3301635/change-private-static-final-fiel...")
 
Line 6: Line 6:
  
 
[http://stackoverflow.com/questions/3301635/change-private-static-final-field-using-java-reflection Источник]
 
[http://stackoverflow.com/questions/3301635/change-private-static-final-field-using-java-reflection Источник]
 +
  
 
<source lang="java">
 
<source lang="java">

Revision as of 11:12, 5 March 2016

Reflection


Change private 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