首页 > 解决方案 > 是否可以从 Java 中的配置文件初始化静态最终变量?

问题描述

我想用 Java 从配置文件中初始化一个静态最终变量。变量是这样的:

public static final String SCHEMA = "my_schema";

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

标签: javaconfigurationconstantsfinal

解决方案


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

我能想到的唯一解决方法是在包含最终变量的行之前有另一个非最终私有字符串变量和一个静态初始化块。例如下面的代码将在初始化后产生不同的最终变量

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);
    }
}

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

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


推荐阅读