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));
Ausgang:Ändern privaten letzte Felder durch Reflexion
s = I’m totally safe
f.get(pf): I’m totally safe
s = I’m totally safe
No, you’re not!
Warum ist es auf diese Weise arbeiten, können Sie bitte erklären? Der erste Druck sagt uns, dass das private "s" Feld nicht geändert wurde, wie ich es erwarte. Aber wenn wir das Feld über Reflexion bekommen, zeigt der zweite Druck, es wird aktualisiert.
Siehe: http: // stackoverflow.com/questions/3301635/change-private-statisch-final-field-using-java-reflection/31268945 # 31268945 – iirekm
http://stackoverflow.com/questions/3301635/change-private-static-final-field-using- Java-Reflexion/31268945 # 31268945 – iirekm