मैंने हाल ही में Change private static final field using Java reflection पर ठोकर खाई और polygenelubricants 'EverythingIsTrue
कक्षा का परीक्षण किया, ठीक काम करता है, System.out.format("Everything is %s", false);
प्रिंट Everything is true
वास्तव में प्रिंट करता है। लेकिन जब मैं के रूप मेंजावा प्रतिबिंब का उपयोग कर स्थैतिक अंतिम क्षेत्र को बदल नहीं सकते?
public class EverythingIsTrue {
public static final boolean FALSE = false;
static void setFinalStatic(Field field, Object newValue) throws Exception {
field.setAccessible(true);
Field modifiersField = Field.class.getDeclaredField("modifiers");
modifiersField.setAccessible(true);
modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
field.set(null, newValue);
}
public static void main(String[] args) throws Exception {
setFinalStatic(EverythingIsTrue.class.getField("FALSE"), true);
System.out.format("Everything is %s", FALSE);
}
}
कोड बदलने यह प्रिंट
Everything is false
किसी को भी पता है क्यों? क्या फाइनलस्टैटिक वास्तव में काम करता है या नहीं?
वास्तव में मेरा रूप में एक ही जवाब है कौन - केवल अधिक शब्दों के साथ! – dty
@dty ऐसा लगता है कि यह अनंत अधिक शब्दों भी कर रहे हैं! ;-) –
) मैं अपने उत्तर हटा दिया गया था के रूप में स्वीकार कर लिया गया तुम्हारा और मेरा किसी भी ख़ास नहीं कर पा रहा था - केवल संक्षिप्तता; – dty