【发布时间】:2011-05-29 19:39:11
【问题描述】:
class WithPrivateFinalField {
private final String s = "I’m totally safe";
public String toString() {
return "s = " + s;
}
}
WithPrivateFinalField pf = new WithPrivateFinalField();
System.out.println(pf);
Field f = pf.getClass().getDeclaredField("s");
f.setAccessible(true);
System.out.println("f.get(pf): " + f.get(pf));
f.set(pf, "No, you’re not!");
System.out.println(pf);
System.out.println(f.get(pf));
输出:
s = I’m totally safe
f.get(pf): I’m totally safe
s = I’m totally safe
No, you’re not!
为什么会这样,你能解释一下吗?第一个打印告诉我们私有“s”字段没有改变,正如我所料。但是,如果我们通过反射获得该字段,则第二个打印显示它已更新。
【问题讨论】:
标签: java reflection final