gpt4 book ai didi

java - 更改嵌套静态类的最终静态成员的值

转载 作者:行者123 更新时间:2023-11-30 06:18:30 25 4
gpt4 key购买 nike

当我尝试更改嵌套静态类的静态最终成员的值时,我看不到它起作用。当我尝试下面的代码来更改其他类的静态最终成员时,它起作用了。

   public class FinalPivateStaticMember {

public static void main(String[] args) {
System.out.println("Initial value == "+Test.val);
try {
Class cls = Class.forName("com.reflection.FinalPivateStaticMember$Test");
try {
Field file_systems_loaded = cls.getDeclaredField("val");
file_systems_loaded.setAccessible(true);

Field modifiers = Field.class.getDeclaredField("modifiers");
modifiers.setAccessible(true);
try {
System.out.println("--"+file_systems_loaded.getModifiers());
modifiers.setInt(file_systems_loaded,file_systems_loaded.getModifiers() & ~Modifier.FINAL);
System.out.println("--"+file_systems_loaded.getModifiers());
} catch (IllegalAccessException e) {
e.printStackTrace();
}
try {
file_systems_loaded.setBoolean(null,false);
} catch (IllegalAccessException e) {
e.printStackTrace();
}
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
System.out.print("Final value == "+Test.val);

}

static class Test{

private static final boolean val = true;
}

}

上述代码的输出

Initial value == true
--26
--10
Final value == true

最佳答案

该值实际上正在发生变化,但由于编译器优化,您在打印语句中看不到变化。编译器可以(并且将会)用它们所保存的值替换出现的原始(和String)静态最终字段。因此,编译后您的打印语句将相当于

System.out.print("Final value == "+true)

请注意,该变量在编译阶段本身会被替换为其源值。

关于java - 更改嵌套静态类的最终静态成员的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48689256/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com