Reflection. Change private static final field
From AsIsWiki
(Difference between revisions)
(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
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; } }