小编Nic*_*cnl的帖子

Java Reflection,更改私有静态final字段没有做任何事情

我正在尝试使用Java Reflection更改私有静态final字段.但它只是失败了.有人有想法吗?

这是我的代码:

public class SecuredClass {
    private static final String securedField = "SecretData";
    public static String getSecretData() { return securedField; }
}
Run Code Online (Sandbox Code Playgroud)
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());
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的输出:

Before …
Run Code Online (Sandbox Code Playgroud)

java reflection static final field

5
推荐指数
1
解决办法
4937
查看次数

标签 统计

field ×1

final ×1

java ×1

reflection ×1

static ×1