Die Verlängerung eines singleton in Java
Was ich tun möchte ist einfach eine Klasse, wenn Sie es verlängern, erhalten Sie automatisch die getInstance-Klasse. Das problem ist, wenn ich es verlängern kann ich nicht, Verweis auf die Kind-Klasse. Die einzige Möglichkeit, die ich sehe, dies zu tun ist durch die Typisierung ((ClassName)Klasse.getInstance()) ist das aber nicht sehr benutzerfreundlich. Irgendwelche Vorschläge?
Dies ist ein weiterer Grund, warum Singletons sind nicht gedacht, um den Einsatz in realen Anwendungen. Wenn Sie wollen, so etwas wie, dass, Sie müssen erstellen Sie eine statische Methode in jeder Klasse, die Sie erweitert die Singleton übergeordneten Klasse, da
Könnten Sie nach, was Sie geschrieben haben, damit wir helfen können. Übrigens, die meisten der Zeit, singleton wird abgeraten.
Ihre
könntest du deinen Kommentar als Antwort? Du triffst den Nagel zuerst, und keiner der aktuellen Antworten nahe kommen.
Ich bin mir nicht wirklich sicher, ob das eine Antwort (noch) nicht. Beachten Sie, dass die OP noch nicht einen Kommentar Hinzugefügt-hier die Verteidigung des singleton-Nutzung, so denke ich nicht, dass ist noch richtige post die Antwort.
static
Methoden können nicht vererbt werden.Könnten Sie nach, was Sie geschrieben haben, damit wir helfen können. Übrigens, die meisten der Zeit, singleton wird abgeraten.
Ihre
getInstance()
Methode wird static
so kann man nicht außer Kraft setzen stackoverflow.com/questions/2223386/... - Singletons sind nicht groß als Anwendungsbereich kommt ins Spiel stackoverflow.com/a/16076495/573057könntest du deinen Kommentar als Antwort? Du triffst den Nagel zuerst, und keiner der aktuellen Antworten nahe kommen.
Ich bin mir nicht wirklich sicher, ob das eine Antwort (noch) nicht. Beachten Sie, dass die OP noch nicht einen Kommentar Hinzugefügt-hier die Verteidigung des singleton-Nutzung, so denke ich nicht, dass ist noch richtige post die Antwort.
InformationsquelleAutor Arhowk | 2013-04-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Lässt sich nicht erweitern, eine richtige Singleton, da es angeblich einen privaten Konstruktor:
Effektive Java-Element 2: Erzwingen Sie die Eigenschaft singleton mit einem privaten Konstruktor
aber als Sie nicht initiieren. Der Aufruf der Konstruktor von getInstance() würde nicht funktionieren
Die OP entweder will der Superklasse zu sein, selbst ein singleton ist, oder nicht. Nehme an, der ehemalige wahr. Dann die Oberklasse soll ein singleton sein könnte, untergeordnet, was zu mehr als einer Instanz, die es machen würde ... nicht um ein singleton. Also die früheren Ergebnisse in einem Widerspruch. Letzteres tunlich ist. Könnte man definieren, eine Superklasse für singletons, mit einer nicht-privaten Konstruktor. Für diesen Fall, der Konstruktor ist nicht das problem. Das problem ist
getInstance()
. Es muss sich um eine statische Methode, weil es heißt, ohne eine Instanz. Aber statische Methoden werden nicht vererbt.Ein protected Konstruktor heißt, Sie können neue Instanzen zu erstellen, die von überall in der Verpackung. Das wird nicht eine gute singleton-nun, wäre es?
Vielleicht, um des Arguments Willen, in einem geschützten/default/public Konstruktor können wir eine Ausnahme werfen, falls _INSTANCE ist nicht NULL
InformationsquelleAutor Evgeniy Dorofeev
Die einzige Möglichkeit zum überschreiben eines singleton ein singleton, der erwartet, dass außer Kraft gesetzt werden. Der einfachste Weg, dies zu tun ist Singleton implementiert, dass eine
interface
(oder ist sonst vollabstract
selbst), die intern erzeugt ein gespritzt singleton bei der ersten Verwendung vongetInstance()
.Erstellen Sie eine Klasse:
public class SingletonMethodsImpl { public String getName() { return ""; } public void doSomething(Object something) { } }
. Dann erstellen Sie eine Datei für dieServiceLoader
zu verwenden inMETA-INF/services/package.of.SingletonMethods
deren einziger Wert istpackage.of.SingletonMethodsImpl
(wopackage.of
ist unabhängig von der eigentlichen Seite).InformationsquelleAutor pickypg