2016-10-21 2 views
-1

내 수석이 작업 한 프로젝트를 진행하면서이 클래스를 발견했습니다. 이 코드가 제대로 작동하는지 이해하려고 노력 중입니다. 약간 비린내가 생기기 때문입니다.개체의 인스턴스를 생성자 또는 메서드 외부에서 생성

여기에 DataStore 클래스 개체가 global 수준에서 인스턴스화되고 있는데, 어떻게 작동하는지 모르겠습니다. 이것이 싱글 톤 클래스라는 것을 이해하지만 언제 이런 global 개체를 만들 수 있습니까? mContextDataStore으로 전달되는 것이 항상 null이 아니겠습니까?

감사합니다.

+0

mContext가 설정된 방법과시기를 나타내는 코드를 추가해야합니다. – nutfox

+0

변수'dataStore'가 생성되고'DataStore (mContext, "DATA");'객체는 새로운 DataFetcher 인스턴스가 생성 될 때마다 인스턴스화 될 것입니다. 'DataFetcher()'가 호출됩니다. –

+0

@TimothyTruckle 그래서 mContext가 값을 올바르게받을 때만 새 DataStore (mContext, "DATA")가 호출됩니다. – varunkr

답변

0

나는 당신이 교육자인지 학생인지 알 수 없습니다. 어느 경우에도 이런 코드를 권장해서는 안됩니다.

Google은 코드 기반에서 great lengths ~ find and remove singletons으로갔습니다. 나는 학생들이 그들을 사용하도록 격려하지 않을 것이다.

싱글 톤이 필요하다고 생각하는 경우에도이 예제는 불필요하게 복잡하고 불투명합니다. 도우미 나 다른 기계가 필요 없습니다. 이 충분하다 :

public class Singleton { 
    private static final Singleton instance = new Singleton(); 

    private Singleton() {} 

    public static Singleton getInstance() { return instance; } 
} 

내가 게으른가 Singleton의 인스턴스를 이해 적이 없어요. 그게 사용된다면 왜 기다려야 하죠?

+0

답장을 보내 주셔서 감사합니다. 알았어,하지만 내 질문에 대한 답변을 얻지 못했을 때, 즉 DataStore 객체가 정확히 인스턴스화 될 때가 언제라고 생각합니까? getInstance()가 호출 된 후에 만 ​​인스턴스화됩니까? 또는 mContext에 전달 된 mContext가 null이되어 DataStore 클래스에 문제가 발생할 수 있다는 보장이 없습니다. 본인은이 코드가 복잡하고 좋지 않을 수 있음을 이해합니다. 그러나 객체가 그런 방식으로 인스턴스화되는 것을 보지 못했습니다. 그래서 내가 물었습니다. 감사 !! – varunkr

+0

데이터 스토어는 "new"라고하는 순간 인스턴스화됩니다. 모든 코드에서 어디에도 보이지 않는 것은 소비자에게 노출되는 곳입니다. 그것이 내가 한 일을 쓴 이유입니다. DataStore의 소비자가 어떻게 그것을 얻는 지 간단하게합니다. – duffymo

관련 문제