将全局配置变量封装为静态?

时间:2012-11-27 15:20:42

标签: java java-ee static

我有几个全局变量,主要是不变。 有时候(每隔几个月)我想改变它们。

它们保存在数据库中。

问题是:如果我更改静态变量,其他服务仍然使用旧值。 我做错了什么?

class Config {
    public static Default DEFAULTS = new Default();
    //several other static defaults 

    public static in DIGIT = DEFAULTS.getDigit();
}


class Default() {
    private int digit = 0;
    //get+set
}

class Service() {
    updateDefaults() {
        Config.DEFAULTS.setDigit(2);
        dao.update(Config.DEFAULTS);
    }
}

问题:使用Config.DIGIT;的其他服务仍然使用旧的默认值digit = 0

2 个答案:

答案 0 :(得分:2)

问题是您正在更新默认的DEFAULTS实例中的数字值。但是,Config.DIGITS的值已设置且未重置,即DIGITS的分配不会更新,因为您更改了DEFAULTS.digit的值。

此外,我假设此代码中存在一些拼写错误,因为此处的Config.DEFAULTS是私有的,无法直接更新。

答案 1 :(得分:1)

Config.DIGIT的值设置为0一次,永不改变。

你可以:

  • 更新Config.DIGIT
  • Service.updateDefaults()的值
  • Config类中添加一个getter以检索DEFAULTS.getDigit()
  • 的值