2012-11-27 2 views
0

나는 전역 변수이며 주로 변경되지 않는 여러 변수가 있습니다. 때때로 (몇 달에 한 번) 나는 그들을 바꾸고 싶다.글로벌 구성 변수를 정적으로 캡슐화 하시겠습니까?

이들은 DB에 저장됩니다.

문제점 : 정적 변수를 변경하면 다른 서비스에서도 이전 값을 사용합니다. 내가 뭘 잘못하고 있니?

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

문제의 값을 검색 할 Config 클래스의 게터를 추가하는 업데이트하려는 것입니다 :

당신도 Default의 DEFAULTS 인스턴스의 자리수 그러나 Config.DIGITS의 값은 이미 설정되어 있고 재설정되지 않습니다. 즉, DEFAULTS.digit의 값을 변경 했으므로 DIGITS 할당이 업데이트되지 않습니다.

또한이 코드에는 Config.DEFAULTS가 개인용이므로 여기에 일부 오타가 있다고 가정합니다. 여기서는 직접 업데이트 할 수 없습니다.

1

Config.DIGIT의 값은 0으로 한 번 설정되며 변경되지 않습니다.

  • 갱신 Service.updateDefaults()
  • 에서 Config.DIGIT의 값이 DEFAULTS.getDigit()
관련 문제