2012-11-27 68 views
0

我有幾個變量是全球性的,主要不會改變。 有時(每隔幾個月)我想改變它們。將全局配置變量封裝爲靜態?

它們保存在數據庫中。

問題是:如果我更改靜態變量,其他服務仍使用舊值。 我在做什麼錯?

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舊的默認值。

+1

他已經刪除了他的非官方評論(這只是表明他根本不瞭解靜態是如何工作的)。我也會刪除我的評論。 – BalusC

回答

2

問題的價值在於你正在更新Default的DEFAULTS實例中數字的值。但是,Config.DIGITS的值已經設置並且不會被重置,即DIGITS的賦值不會因爲您更改DEFAULTS.digit的值而更新。

此外,我認爲這個代碼中有一些拼寫錯誤,因爲Config.DEFAULTS是私人的,所以不能直接更新。

1

Config.DIGIT的值設置爲0一次,並且永不改變。

您可以:

  • 更新Config.DIGITService.updateDefaults()
  • 值在Config類添加一個getter檢索的DEFAULTS.getDigit()