public class A{
B b;
A(){
b = new B();
b.xxx();
//b做了很多初始化
}
private static class B{
static final int v = 0;
}
}
要修改b中的v,尝试代码如下
A a = new A();
Class<?> cls = a.getClass();
Field mTNField =cls.getDeclaredField("b");
Class<?> mTnCls = mTNField.getType();
Field mTnDurationField =mTnCls.getDeclaredField("v");
mTnDurationField.setAccessible(true);
//下面方法的第一个参数需要一个B 对象,但是这个对象应该怎么拿到呢?
mTnDurationField.setInt(mTNField.getType().clone(),999);
final
在JVM
启动后就不能改动了,所以要去掉。对于静态属性直接置空即可:
field.setInt(null, 1);