相关疑难解决方法(0)

通过反射改变私人最终领域

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));
Run Code Online (Sandbox Code Playgroud)

输出:

s = I’m totally safe
f.get(pf): I’m totally safe
s = I’m totally safe
No, you’re not!
Run Code Online (Sandbox Code Playgroud)

为什么它以这种方式工作,你能解释一下吗?第一个印刷品告诉我们私人"s"字段没有像我期望的那样被改变.但是如果我们通过反射获得该字段,则第二个打印显示,它会更新.

java reflection final

50
推荐指数
3
解决办法
5万
查看次数

标签 统计

final ×1

java ×1

reflection ×1