Niedawno natknąłem się na Change private static final field using Java reflection i przetestowałem polygenelubricants 'EverythingIsTrue
klasy, działa dobrze, System.out.format("Everything is %s", false);
drukuje Everything is true
rzeczywiście. Ale kiedy zmiany kodu jakoNie można zmienić statycznego pola końcowego przy użyciu odbicia Java?
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);
}
}
drukuje
Everything is false
Czy ktoś wie dlaczego? Czy setFinalStatic rzeczywiście działa, czy nie?
która jest dokładnie taka sama odpowiedź jak ja - tylko z większą ilością słów! – dty
@dty wygląda na to, że są nieskończone więcej słów nawet;) –
Usunąłem moją odpowiedź, ponieważ Twoja została zaakceptowana, a moja nie dodawała żadnej wartości - tylko zwięzłość! ;-) – dty