Quantcast
Channel: icancode.de
Viewing all articles
Browse latest Browse all 34

Singleton mit Enums

$
0
0

Immer wieder die alte Leier mit Singletons. Wie Torsten schon ganz richtig drauf hingewiesen hat, haben Singletons ein großes Problem mit Threadsicherheit.

Wenn ich an ein Singleton denke, dann denke ich erstmal an etwas in der Art:

public class Singleton {
  private static Singleton instance;

  private Singleton() {}

  public static Singleton getInstance() {
    if (Singleton.instance == null) {
      Singleton.instance = new Singleton();
    }
    return Singleton.instance;
  }
}

getInstance() mit null-Check. Fertig. Wenn da nicht diese Nebenläufigkeit wäre. Um die geht es hier aber eigentlich nicht vordergründig. Habt ihr mal darüber nachgedacht, einen Enum für ein Singleton zu benutzen? Das könnte z.B. so aussehen.

public enum Singleton{
    INSTANCE;
}

Ja ja, so einen Enum hat jeder schon mal gesehen. Der Clou: Enums können eben auch Methoden und Variablen halten. Durch die Implementierung von Enums sind diese nicht nur threadsicher, sie werden auch erst bei der ersten Verwendung erzeugt.

public enum Singleton{
    INSTANCE;
    
    private String value;

    public void connect() {}  
    public String getValue() {}
}

Die Verwendung ist einfach:

Singleton.INSTANCE.getValue()

Fertig!

Der Artikel Singleton mit Enums erschien zuerst auf icancode.de.


Viewing all articles
Browse latest Browse all 34