метод.

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" не было изменено, как я ожидаю. Но если мы получим поле через отражение, второй отпечаток показывает, что оно обновляется.

Ответы на вопрос(0)

Ваш ответ на вопрос