2016-10-21 5 views
-1

私の上級勤務のプロジェクトを進行中にこのクラスに出くわしました。私はこのコードが正しく動作するかどうかを理解しようとしています。オブジェクトのインスタンスをグローバルに作成する(コンストラクタまたはメソッドの外部にある)

ここでDataStoreクラスオブジェクトは、globalレベルでインスタンス化されていますが、どのように動作するのかわかりません。 これはシングルトンクラスであることを理解していますが、いつこのようなglobalオブジェクトを作成するのですか? mContextDataStoreに渡されることは常にNULLではないことが保証されていますか?

ありがとう!!

+0

mContextの設定方法とタイミングを示すコードを追加する必要があります。 – nutfox

+0

変数 'dataStore'が作成され、' DataStore(mContext、 "DATA"); 'というオブジェクトは、' DataFetcher'の新しいインスタンスが作成されるたびにインスタンス化されます(これはたまに1回だけです)。 'DataFetcher()'が呼び出されます。 –

+0

@TimothyTruckleそれは、新しいデータストア(mContext、 "DATA")は、mContextが値を正しく受け取ったときにのみ呼び出されることを意味しますか? – varunkr

答えて

0

あなたが教育者であるか学生であるかはわかりません。どちらの場合も、このようなコードを奨励するべきではありません。

Googleはコードベースからgreat lengthsfind and remove singletonsに行っています。私は学生がそれらを使用することを奨励しません。

シングルトンが必要だと思ったとしても、この例は不必要に複雑で不透明です。ヘルパーやその他の機械は必要ありません。これで十分です。

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

    private Singleton() {} 

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

遅延インスタンス化Singletonはわかりません。それが使用されることがわかっている場合は、なぜ待つのですか?

+0

返事をありがとう。私は参照してくださいしかし、私は私の質問への答え、つまり正確にデータストアのオブジェクトがインスタンス化されませんでしたと思いますか? getInstance()が呼び出された後にのみインスタンス化されますか?または、mContextに渡されたmContextがnullで、DataStoreクラスに問題が発生する可能性があるという保証はありません。私はこのコードが複雑で悪いかもしれないことを理解しています。しかし、私はそのような方法でインスタンス化されているオブジェクトを見ていないと私は尋ねた理由です。ありがとう!! – varunkr

+0

データストアは、「新規」と呼ばれる瞬間にインスタンス化されます。どこのコードでも私が見ていないのは、それを消費者に公開する場所です。だから、私がやったことを書きました:DataStoreの消費者がどのようにそれに到達するのかを簡素化する。 – duffymo

関連する問題