是否可以从Java中的配置文件初始化静态最终变量?

时间:2019-09-10 07:56:46

标签: java configuration constants final

我想用Java从配置文件初始化一个静态最终变量。变量如下:

public static final String SCHEMA = "my_schema";

由于架构可以更改,因此我想从配置文件中读取它。但是,我必须使用final变量,因为JPA中没有其他方法可以使“表”注释中的“模式”属性初始化。关键是由于过去的选择,每个环境都位于具有不同模式名称的同一数据库中。

1 个答案:

答案 0 :(得分:-1)

UPD -已编辑,以获得更好的解决方案

我能想到的唯一解决方法是,在具有最终变量的行之前,在之前添加另一个非最终私有String变量和一个静态初始化块。例如,以下代码在初始化后将产生不同的最终变量

public class TestSmth {

    private static String yourCustomSchema;
    static {
       yourCustomSchema = Math.random() > 0.5 ? "my_schema" : "another_schema";
     }

    public static final String SCHEMA = yourCustomSchema;


    public static void main(String[] args) {
        System.out.println(SCHEMA);
    }
}

您应该在静态块中实现配置文件加载

这样,在加载类后,您将初始化最终变量,并且无法访问非最终私有变量。