Generisches Singleton implementieren

Status
Nicht offen für weitere Antworten.
B

Baracke_out

Gast
Da ich von C++ gewohnt bin das Singleton-Verhalten einfach zu erben, wollte ich sowas auch in Java implementieren.

Der momentane Code sieht folgendermassen aus:

Code:
public class Singleton <Derived> {
    
    private static Derived instance = null;
    
    public synchronized static Derived getInstance() {
        if(instance == null) {
            instance = new Derived();
        }
        return instance;
    }
            
    private Singleton() {
    }
    
}

Doch ich bekomm folgende Fehlermeldung:
non-static class Derived cannot be referenced from a static Context.

Aber soweit ich weiss kann ich das Generic nicht statisch machen oder geht das irgendwie anders?

Gruß
Baracke
 

DocRandom

Top Contributor
nicht
Code:
public synchronized static Derived getInstance()
sondern
Code:
public static synchronized Singleton getInstance()
lg
DocRandom
 
M

maki

Gast
1. Kann man in Java die Singleton Eigenschaft nicht vererben
2. Kann man in Java Singletons auch ohne synchronisation (aber trotzdem mit lazy Initialisierung) threadsicher machen ;)
 
B

Baracke_out

Gast
Wusste nicht das die Reinfolge von static, public und synchronized irgendeine Rolle spielt, jedenfalls ist mir keine bekannt. Wär nett wenn mich jemand aufklären könnte falls es da eine gibt :)

Jedenfalls ist das nicht der Fehler, denn so hatte ich es vorher. Das Ding ist wenn ich statt:

public class Singleton <Derived>

public class Singleton <static Derived>

schreibe kriege ich nur die Fehlermeldung das ich einen <identifier> brauche.

Gruß
Baracke
 
M

maki

Gast
3. sind Singeltons mittlerweile schon mehr Antipattern als Pattern.
Hatte ich vergessen ;)

Baracke_out,

du hast aber schon verstanden, dass es

1. nicht geht was du vorhast
2. wenn man wirklich mehrere Singletons hat, so dass sich Vererbung lohnen würde, man wahrscheinlich ein schlechtes Design hat
 

DocRandom

Top Contributor
..ich weiß zwar nicht was Du vor hast, aber ich denke mal, das dies so nicht funktionieren wird.
Als Beispiel wie man/frau das in Java lösen kann will ich Dir mal geben.

Ich hab eine Queue mit Genericas und will damit einen Singleton bauen:
Die Queue:
Code:
import java.util.LinkedList;
import java.util.Queue;

public class FifoQueue<T> {

	private Queue<T> queue;
	
	public FifoQueue() {
		queue = new LinkedList<T>();
	}
	public synchronized void addElement( T o ) {
		queue.add( o );
		notify();
	}
	public synchronized T getElement() {
		T o = null;
		if(!queue.isEmpty())
			o = queue.poll();
		
		notify();
		return o;
	}
	public int getCount() {

		return queue.size();
	}
}
Die Message-Klasse:
Code:
import java.text.SimpleDateFormat;
import java.util.Date;

import cbs.interfaces.MessagesFlags;

public class Message {
	
	private MessagesFlags msgflag;
	private String msg;
	private String timestamp;
	
	public Message() {
		this.msgflag = MessagesFlags.SYSTEM;
		this.msg = "";
		makeTimeStamp();
	}
	
	public Message(MessagesFlags msgflag, String msg) {
		this.msgflag = msgflag;
		this.msg = msg;
		makeTimeStamp();
	}

	public MessagesFlags getMsgflag() {
		return msgflag;
	}

	public void setMsgflag(MessagesFlags msgflag) {
		this.msgflag = msgflag;
		makeTimeStamp();
	}

	public String getMsg() {
		return msg;
	}

	public void setMsg(String msg) {
		this.msg = msg;
		makeTimeStamp();
	}
	
	public String getTimestamp() {
		return timestamp;
	}

	private void makeTimeStamp() {
		SimpleDateFormat sdf = new SimpleDateFormat("hh:mm:ss");
		timestamp = sdf.format(new Date());
	}
}
Die SingletonKlasse:
Code:
import cbs.util.FifoQueue;
import cbs.util.Message;

public class MessageQueue extends FifoQueue<Message>{

	private static MessageQueue instance = null;
	
	private MessageQueue() {
		super();
	}
	
	public static synchronized MessageQueue getInstance() {
		if (instance == null)
			instance = new MessageQueue();
		
		return instance;
	}
}

lg
DocRandom
 
G

Gast

Gast
Ich hatte nicht vor etwas statisches zu vererben. Mein gedanke war folgender, einmal ein Singleton schreiben und falls ich dann mal brauche einfach erbe.

Was in etwa so in meinen Gedanken geschwirrt ist:

Code:
class MeineKlasse extends Singleton<MeineKlasse> {
 ......
}

Doch wie du schon gemeint hast sind keine generischen Informationen mehr zur Laufzeit da. Doch was genau bleibt dann übrig?
 
S

SlaterB

Gast
> Ich hatte nicht vor etwas statisches zu vererben

+
> private static Derived instance = null;
+
> [..] und falls ich dann mal brauche einfach erbe.

= ??

----------

> Doch was genau bleibt dann übrig?

stell dir vereinfacht vor, dass vor dem Kompilieren alle <xy> aus dem Quellcode entfernt werden

da wo es nötig ist (Variablendeklaration, Rückgabewerte) muss dann 'Object' eingefügt werden

aber nur mit Vorbehalt,
genauer kenne ich mich nicht aus, kommt sicher gleich von jemand anderen
 
B

Baracke_out

Gast
Gut ich geb zu ich hätte statisches Object schreiben sollen den einen statischen Member kann man ja wohl erben oder? ^^

Aber du hast recht, man kann keine Instancen von Typ Parametern (Generics) erzeugen. Somit hat sich die Sache für mich erstmal erledigt, schade würde einem eine Menge Schreibarbeit abnehmen können bei gleichen Designs (nicht alle aber vielen).

Hier der simple Test den ich dafür hergenommen habe
Code:
public class Test <T>{
    private T test;

    public Test() {
        test = new T();
    }
    
}

Gruß
Baracke
 
G

Gast

Gast
b.z.w. er existiert nur einmal, was ja der Sinn der beim Singleton wäre ;)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
L generisches Array Allgemeine Java-Themen 1
S Generisches generve... Allgemeine Java-Themen 9
D Generisches Object erstellen Allgemeine Java-Themen 2
EinNickname9 Best Practice Singleton und Singleton mit Instanz zu anderer Klasse -Pattern Allgemeine Java-Themen 30
Neoline Klassen Singleton Klasse buchmanager Allgemeine Java-Themen 19
J Singleton Allgemeine Java-Themen 5
Z deserialize singleton Allgemeine Java-Themen 9
A Singleton threadsafe Allgemeine Java-Themen 8
S Singleton Instanz löschen Allgemeine Java-Themen 5
A Datei als Object einlesen und das Object als Singleton instance setzen. Allgemeine Java-Themen 13
T ActionListener und Singleton Allgemeine Java-Themen 15
S Singleton Entwurfsmuster Allgemeine Java-Themen 20
T So eine Art Singleton-Factory? Allgemeine Java-Themen 3
S Singleton-Klasse und ThreadLocal-Klasse von abstrakter Klasse ableiten? Allgemeine Java-Themen 2
S Singleton hier sinnvol? Allgemeine Java-Themen 20
T Zugriff auf Singleton verkürzen - Namespaces?? Allgemeine Java-Themen 20
B Volatile Frage: Reicht es nur den Singleton als volatile zu deklarieren? Allgemeine Java-Themen 4
Iron Monkey Singleton mit Parameter Allgemeine Java-Themen 14
G Singleton Frage: Allgemeine Java-Themen 17
M Singleton und Vererbung? Allgemeine Java-Themen 45
R Wo initilisiere ich eine Liste in einem Singleton? Allgemeine Java-Themen 2
M Java Garbage Collector Frage (Singleton Pattern) Allgemeine Java-Themen 13
H Singleton und MultiThreading [erledigt] Allgemeine Java-Themen 3
S Singleton Pattern mit Generics Allgemeine Java-Themen 4
P SingleTon Allgemeine Java-Themen 5
M zwei Threads - ein singleton-Objekt Allgemeine Java-Themen 3
RaoulDuke Agent als Singleton Thread Allgemeine Java-Themen 7
S singleton vs. static Allgemeine Java-Themen 7
P Singleton vs static Allgemeine Java-Themen 19
K Singleton vererben Allgemeine Java-Themen 15
E Singleton vererben Allgemeine Java-Themen 10
E Frage zu Singleton Allgemeine Java-Themen 22
D Design Pattern: Singleton Allgemeine Java-Themen 4
K Sequenzdiagramm für Singleton-Muster Allgemeine Java-Themen 5
L Buchungssystem implementieren Allgemeine Java-Themen 2
M Kann man Annotationen auf Klassen einschränken die ein Interface implementieren? Allgemeine Java-Themen 1
MiMa Was sollte man ins JavaDoc implementieren?? Allgemeine Java-Themen 17
L Generator für einen Parser implementieren Allgemeine Java-Themen 13
L Template Engine entwerfen und implementieren Allgemeine Java-Themen 4
D OOP Gemeinsamen ID-Raum für zwei Klassen implementieren Allgemeine Java-Themen 7
P BruteForce Ansatz implementieren Allgemeine Java-Themen 32
A Breitensuche mit Hop-Distanzen in Java - Wie implementieren? Allgemeine Java-Themen 4
M Maven Deutsche Post API implementieren Allgemeine Java-Themen 2
S Eclipse Probleme beim Implementieren / Ausführen von jUnit 5-Test Suites Allgemeine Java-Themen 14
N Best Practice Allgemeines Verhalten für ein Interface implementieren? Allgemeine Java-Themen 7
K Geschätze Zeit implementieren Allgemeine Java-Themen 14
B Live Search implementieren Allgemeine Java-Themen 4
S Threads Kann mir jemand helfen eine parallele Hilfsklasse zu implementieren..? Allgemeine Java-Themen 3
T Generisch implementieren Allgemeine Java-Themen 31
J Wie implementieren, Frge an die Erfahrenen... Allgemeine Java-Themen 7
M Interface einer Library implementieren Allgemeine Java-Themen 3
F Schlüsselworte RSA Verschlüsselung implementieren Allgemeine Java-Themen 5
H Copy Paste implementieren ausserhalb des Programms? Allgemeine Java-Themen 2
D Aufgabe: Schnittstelle und Proxy implementieren Allgemeine Java-Themen 2
B Best Practice HTML Output Optimal implementieren Allgemeine Java-Themen 3
I Mehrfaches Implementieren eines generischen Interface Allgemeine Java-Themen 9
DStrohma In abstrakter Klasse Konstruktor von Instanz implementieren Allgemeine Java-Themen 11
X Modalität von JDialog nachträglich in JFrame implementieren? Allgemeine Java-Themen 8
O Plugin perfomrant implementieren Allgemeine Java-Themen 12
P InterfaceMethoden nicht implementieren Allgemeine Java-Themen 5
C Hilfe bei Adressbuch-Programmierung, wie am Besten mit JList implementieren Allgemeine Java-Themen 2
A RandomAccessFile - "insert" implementieren? Allgemeine Java-Themen 4
nrg Wie würdet ihr eine "Dauerschnittstelle" implementieren? Allgemeine Java-Themen 5
T Von JComponent erben und Set implementieren Allgemeine Java-Themen 2
D Wozu runnable implementieren? Allgemeine Java-Themen 3
D PriorityQueue selbst implementieren Allgemeine Java-Themen 15
E Wie Assoziationen implementieren in Java Allgemeine Java-Themen 22
B mathematische Formeln, umformungen nicht einzeln implementieren Allgemeine Java-Themen 6
J Undo auf eine ArrayList implementieren Allgemeine Java-Themen 3
deetee ListIterator implementieren Allgemeine Java-Themen 3
A feststellen, welche Klassen ein Interface implementieren Allgemeine Java-Themen 3
T Interface "on-the-fly" implementieren? Allgemeine Java-Themen 3
G Interface - Klassen implementieren das - Reflection ok? Allgemeine Java-Themen 4
G Interface mehrfach implementieren Allgemeine Java-Themen 5
@ zur Laufzeit Interface aus jar implementieren? Allgemeine Java-Themen 5
MQue Vector implementieren Allgemeine Java-Themen 2
MQue Interface implementieren Allgemeine Java-Themen 7
P Liste von Klassen die ein Interface implementieren speichern Allgemeine Java-Themen 12
MQue Methode aus run() aufrufen bzw. implementieren Allgemeine Java-Themen 5
G Collections als Array implementieren Allgemeine Java-Themen 2
P Page Rank Algorithmus implementieren Allgemeine Java-Themen 7
R Interface mittels Reflection implementieren Allgemeine Java-Themen 8
N 2 Interfaces mit Methoden selber Signatur implementieren Allgemeine Java-Themen 5
C Implementieren einer Schnittstelle (Interface), Ausnahmen Allgemeine Java-Themen 7

Ähnliche Java Themen

Neue Themen


Oben