Reflection. Change private static final field
From AsIsWiki
(Difference between revisions)
Line 13: | Line 13: | ||
public class Main { | public class Main { | ||
− | |||
public static void main(String args[]) throws Exception { | public static void main(String args[]) throws Exception { |
Revision as of 11:13, 5 March 2016
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; } }