Reflection. Change private static final field
From AsIsWiki
(Difference between revisions)
Line 3: | Line 3: | ||
− | ==Change private final field== | + | ==Change private static final field== |
[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 Источник] |
Latest revision as of 09:55, 6 March 2016
[edit] 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; } }