final 变量的修改与问题

Final 变量反射修改

1
2
3
4
5
6
field = Comtest.class.getDeclaredField("value1");
field.setAccessible(true);
Field modifiersField = Field.class.getDeclaredField("modifiers");
modifiersField.setAccessible(true);
modifiersField.setInt(field,field.getModifiers()&~Modifier.FINAL);
field.set(null, new char[]{'1', '2', '3'});

field.getModifiers()&~Modifier.FINAL 这句话就是去掉final。其实java的访问权限信息啥的都是以2的N次幂来作为表示的,具体都是在java.lang.reflect.Modifier这个类里。getModifiers()&~Modifier.FINAL 具体看下问运算,如果有(111111&000000=000000.)抹去了16这个final标识。

问题

int/float/String 等不能使用变量反射修改。

0%