Java Language Singleton senza uso di Enum (inizializzazione desiderosa)

Esempio

public class Singleton {    

    private static final Singleton INSTANCE = new Singleton();

    private Singleton() {}

    public static Singleton getInstance() {
        return INSTANCE;
    }
}

Si può sostenere che questo esempio è in effetti un'inizializzazione pigra. Sezione 12.4.1 degli stati della specifica del linguaggio Java :

Una classe o un tipo di interfaccia T verrà inizializzato immediatamente prima della prima occorrenza di una delle seguenti operazioni:

  • T è una classe e viene creata un'istanza di T
  • T è una classe e viene invocato un metodo statico dichiarato da T
  • Viene assegnato un campo statico dichiarato da T
  • Viene utilizzato un campo statico dichiarato da T e il campo non è una variabile costante
  • T è una classe di livello superiore e viene eseguita un'istruzione di asserzione nidificata in modo lessico in T.

Pertanto, fintanto che non ci sono altri campi statici o metodi statici nella classe, l'istanza Singleton non verrà inizializzata finché il metodo getInstance() viene invocato la prima volta.