Recentemente mi sono imbattuto in Change private static final field using Java reflection e nella classe EverythingIsTrue
dei poligenelubrificanti testati, funziona perfettamente, System.out.format("Everything is %s", false);
stampe Everything is true
in effetti. Ma quando cambio il codice comeNon è possibile modificare il campo finale statico utilizzando java reflection?
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);
}
}
esso stampa
Everything is false
Qualcuno sa perché? SetFinalStatic funziona davvero o no?
che è esattamente la stessa risposta come il mio - solo con più parole! – dty
@dty sembra che siano infinite anche più parole;) –
Ho cancellato la mia risposta come la tua era stata accettata e la mia non aggiungeva alcun valore - solo brevità! ;-) – dty