在运行时声明常量

4
我正在从文件中读取数据,并根据所读取的数据设置值。
我的问题是:如果我想将文件中检索到的某个值声明为常量,该怎么办?
编辑:为简单起见,假设该值为 "int" 类型。
3个回答

8

我不确定你是否在寻找 final 关键字?

final int foo = /* get it from the file */;

是的,但每当我尝试将其声明为以下内容时:public static final int CONSTANT; 我无法将其声明为空白。因此,基本上我想在另一个类中拥有这个“public static final int Constant_Int;”,并稍后使用它。 - thunderousNinja
@Jonathan:没错。你必须在声明时或者在 静态初始化块 中初始化 static final 字段。第二个选项可能是解决这个问题的方法。 - Matt Ball
啊,好的,我明白了,静态初始化块就是我的答案!谢谢! - thunderousNinja

5

不确定您希望为此变量设置什么作用域。就创建常量而言,"final" 关键字是您唯一可以使用的选项。定义一个基于运行时数据的 final 局部变量或实例变量很容易,但声明一个静态 final 类成员则更加困难;您必须在类被加载和初始化时立即提供该值,因此必须通过静态初始化块来完成:

public static final int CONSTANT;
static {
    CONSTANT = <something!>;
}

2
这里有一种方法可以实现,只需用你的函数替换generatePseudoConstant()来从文件系统中读取。
    public class PseudoConstant {

    public static final int PSEUDO_CONSTANT;
    private static final Random randomGen = new Random();

    static {
         PSEUDO_CONSTANT = generatePsudoConstant();
    }

    public static void main(String args[]) {
        PseudoConstant instance1 = new PseudoConstant();
        PseudoConstant instance2 = new PseudoConstant();

        System.out.println("PSEUDO_CONSTANT (instance1) = " + instance1.PSEUDO_CONSTANT);
        System.out.println("PSEUDO_CONSTANT (instance2) = " + instance2.PSEUDO_CONSTANT);
    }

    private static int generatePsudoConstant() {
        return randomGen.nextInt(10);
    }
}

干杯!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接