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!
क्यों इसे इस तरह से काम करता है, तो आप कृपया समझा सकते हैं? पहला प्रिंट हमें बताता है कि निजी "एस" फ़ील्ड बदल नहीं गया है, जैसा कि मुझे उम्मीद है। लेकिन अगर हम प्रतिबिंब के माध्यम से क्षेत्र प्राप्त करते हैं, तो दूसरा प्रिंट शो, यह अपडेट किया गया है।
इसे देखें: http: // stackoverflow।कॉम/प्रश्न/3301635/परिवर्तन-निजी-स्थैतिक-अंतिम-क्षेत्र-उपयोग-जावा-प्रतिबिंब/31268945 # 31268945 – iirekm
http://stackoverflow.com/questions/3301635/change-private-static-final-field-using- जावा-प्रतिबिंब/31268945 # 31268945 – iirekm