2016-10-21 1 views
-1

Ich stieß auf diese Klasse, als ich ein Projekt durchging, an dem mein Senior arbeitete. Ich versuche zu verstehen, ob dieser Code richtig funktioniert, da dies ein wenig fischig erscheint.Instanz eines Objekts global erstellen (außerhalb des Konstruktors oder einer beliebigen Methode)

Hier wird das Klassenobjekt DataStore bei global Ebene instanziiert, ich bin mir nicht sicher, wie das funktioniert? Ich verstehe, dass dies eine Singleton-Klasse ist, aber wann wird solch ein global Objekt erstellt werden? Ist garantiert, dass mContext, die an DataStore übergeben wird, immer nicht null ist?

Danke !!

+0

Sie sollten den Code hinzufügen, der zeigt, wie und wann mContext ebenfalls gesetzt ist. – nutfox

+0

wird die Variable 'dataStore' erzeugt und das Objekt' neuer DataStore (mContext, "DATA"); 'wird jedes Mal instanziert, wenn eine neue Instanz von' DataFetcher' vor dem privaten Konstruktor erzeugt wird (was nur einmal offensichtlich ist) 'DataFetcher()' wird aufgerufen. –

+0

@TimothyTruckle das bedeutet, dass neuer DataStore (mContext, "DATA") nur aufgerufen wird, wenn mContext einen Wert erhält? – varunkr

Antwort

0

Ich kann nicht sagen, ob Sie ein Erzieher oder ein Student sind. In keinem Fall sollte Code wie dieser gefördert werden.

Google ist von ihrer Codebasis zu great lengths zu find and remove singletons gegangen. Ich würde die Schüler nicht ermutigen, sie zu benutzen.

Selbst wenn ich dachte, dass ein Singleton notwendig ist, würde ich sagen, dass dieses Beispiel unnötig komplex und undurchsichtig ist. Es besteht keine Notwendigkeit für einen Helfer oder andere Maschinen. Dies reicht aus:

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

    private Singleton() {} 

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

Ich habe noch nie ein fauler verstanden Singleton instanziiert. Wenn Sie wissen, dass es verwendet wird, warum warten?

+0

Danke für die Antwort. Ich sehe, aber ich denke, ich habe die Antwort auf meine Frage nicht erhalten, d. H. Wann genau wird das DataStore-Objekt instanziiert werden? Wird es erst nach dem Aufruf von getInstance() instanziiert? Oder es gibt keine solche Garantie, in welchem ​​Fall mContext, der an sie übergeben wurde, null sein und ein Problem in der DataStore-Klasse verursachen könnte. Ich verstehe, dass dieser Code komplex ist und möglicherweise schlecht ist. Aber ich habe nicht gesehen, dass ein Objekt so instanziiert wurde, und darum habe ich gefragt. Vielen Dank !! – varunkr

+0

Der DataStore wird in dem Moment instanziiert, in dem Sie "neu" aufrufen. Was ich nirgendwo in diesem Code sehe, ist, wo man es den Konsumenten aussetzt. Deshalb habe ich geschrieben, was ich getan habe: Um zu vereinfachen, wie die Konsumenten von DataStore damit umgehen. – duffymo

Verwandte Themen