私は最近、Change private static final field using Java reflectionにつまずいてテストしたpolygenelubricants 'EverythingIsTrue
クラスがうまく動作します。System.out.format("Everything is %s", false);
実際にEverything is true
を印刷します。私はそれがJavaのリフレクションを使用して静的な最終フィールドを変更することはできませんか?
Everything is false
を印刷し
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);
}
}
ように、コードを変更した場合でも、誰もがなぜ知っていますか? setFinalStaticは実際に動作しますか?
! – dty
@dtyそれは無限の言葉でもあるように見えます;) –
私は自分の答えを削除しました。私の回答は削除されました。 ;-) – dty