Wenn faul Initialisierung einer statischen Singleton in Java tun Sie dies tun können:Können wir ein Java-Mitglied schmerzlos lazy laden, ähnlich wie wir es mit statischen Singletons können?
public class Bob {
private static class SingletonWrapper {
private static final Bob instance = new Bob();
}
public static Bob getInstance() {
return SingletonWrapper.instance;
}
}
Da die innere Klasse SingletonWrapper
nur dann, wenn zuerst die Bob()
erst getInstance()
aufgerufen wird erstellt zugegriffen geladen wird.
Meine Frage ist, ob es ähnliche Tricks gibt, die verwendet werden können, um eine faule Instantiierung einer Mitgliedsvariablen in einem nicht statischen Kontext zu machen.
public class Bob {
// Clearly this doesn't work as not lazy
private final InnerWrapper wrapper = new InnerWrapper();
private class InnerWrapper {
private final Jane jane = new Jane();
}
public Jane getJane() {
return wrapper.jane;
}
}
Gibt es eine Möglichkeit wir eine Instanz von Jane
innerhalb Bob
haben kann und haben fädeln sicher die Instanz nur auf Verlangen ohne doppelte Kontrolle Rast- oder AtomicReference
zu verwenden. Idealerweise sollte die get-Methode so einfach wie die in diesen Beispielen bleiben, aber wenn dies nicht möglich ist, wäre die einfachste und schnellste mögliche (effizienteste) Ausführung der get
-Methode ideal.
@assylias Wie der Kommentar sagt, dass nicht faul Initialisierung tun würde. Sobald Sie einen 'Bob' erstellen, erstellen Sie auch immer und sofort einen' Jane'. –
Mein schlechtes Ich habe zu schnell gelesen - Gründe, warum Sie keine AtomicReference wollen? Es wäre möglicherweise besser als die CHM-Option. – assylias
@assylias Kein spezifischer Grund. Im Grunde möchte ich nur wissen, was meine Optionen sind - wenn man bedenkt, wie einfach und effektiv der statische Wrapper-Trick für die faule Initialisierung von Singletons ist, ist es eine Schande, dass wir nicht etwas Ähnliches für die faule Initialisierung von Mitgliedern finden können, –