Java Reflection, изменение частного статического конечного поля ничего не дало

Я пытаюсь изменить закрытое статическое конечное поле с помощью Java Reflection. Но это просто не удается. У кого-то была идея?

Вот мой код:

public class SecuredClass {
    private static final String securedField = "SecretData";
    public static String getSecretData() { return securedField; }
}

public class ChangeField {
    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
    {
        System.out.println("Before = " + SecuredClass.getSecretData());

        Field stringField = SecuredClass.class.getDeclaredField("securedField");
        stringField.setAccessible(true);
        setFinalStatic(stringField, "Screwed Data!");


        System.out.println("After = " + Java_FileMerger_Main.getSecretData());
    }
}

И вот мой результат:

Before = SecretData
After = SecretData

Я попытался удалить SecurityManager с помощью System.setSecurityManager (null); Но это ничего не изменило. Я знаю, что это зло, но я хочу, чтобы это сработало. Я надеюсь, что кто-нибудь может мне помочь.

5
задан Nicnl 22 February 2012 в 08:29
поделиться