icancode.de

Singleton mit Enums

Einleitung

Rico Magnucki

Rico Magnucki

21st Century Digital Boy und Blog-Gründer. Studiert naturwissenschaftliche Informatik in Bielefeld. Auf dem Blog ist er der Ansprechpartner für LaTeX, schreibt Tutorials, dreht die Videos für YouTube und durchforstet das Internetz nach spannenden Dingen.


Neuste Artikel

HP Deskjet 3636 – Multitalent zum schmalen Preis 09th April, 2017

NETGEAR AC1750 Smart WLAN-Router im Test 10th January, 2016

Java

Singleton mit Enums

Veröffentlicht am .

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!

Rico Magnucki

Rico Magnucki

http://magnucki.de

21st Century Digital Boy und Blog-Gründer. Studiert naturwissenschaftliche Informatik in Bielefeld. Auf dem Blog ist er der Ansprechpartner für LaTeX, schreibt Tutorials, dreht die Videos für YouTube und durchforstet das Internetz nach spannenden Dingen.

Navigation