gpt4 book ai didi

java - 在 Java 运行时添加 final 修饰符

转载 作者:太空狗 更新时间:2023-10-29 22:32:37 25 4
gpt4 key购买 nike

这听起来可能有点奇怪,但是否可以在运行时添加 final 修饰符?

我有一个标记为 public static int/short 的变量。在某些时候,我想防止更改它的值,并且我想将其可访问性保持为标准静态值 (ClassName.field)。

public class Main {

private static int a = 0;

public static void addFinalMod(Field f) {

Field modifiersField = null;
try {
modifiersField = Field.class.getDeclaredField("modifiers");
}
catch (NoSuchFieldException e) {
e.printStackTrace();
}
modifiersField.setAccessible(true);
try {
modifiersField.setInt(f, f.getModifiers() & Modifier.FINAL);
}
catch (IllegalAccessException e) {
e.printStackTrace();
}
}

public static void main(String[] args) {

System.out.println(a);
try {
Field f = Main.class.getDeclaredField("a");
addFinalMod(f);
}
catch (NoSuchFieldException e) {
e.printStackTrace();
}
a = 10; //I was expecting error/exception here
System.out.println(a);
}

输出:

0
10

最佳答案

At certain point I want to prevent changing its value

在应用程序逻辑中执行此操作。使变量只能通过方法访问。保留一个标记来跟踪对变量的任何更改。在应用更改或达到特定点 后,升起标志,并为任何进一步更改变量的尝试抛出异常。

final 是一种语言关键字/功能,用于编写源代码并防止在源代码中重新分配变量。在运行时,它(几乎)什么都不做。

关于java - 在 Java 运行时添加 final 修饰符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27991241/

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