Seperti, sampai batas tertentu, telah disebutkan sebelumnya, enum adalah kelas java dengan kondisi khusus yang definisinya harus dimulai dengan setidaknya satu "konstanta enum".
Selain itu, dan bahwa enum tidak dapat diperpanjang atau digunakan untuk memperluas kelas lain, enum adalah kelas seperti kelas apa pun dan Anda menggunakannya dengan menambahkan metode di bawah definisi konstan:
public enum MySingleton {
INSTANCE;
public void doSomething() { ... }
public synchronized String getSomething() { return something; }
private String something;
}
Anda mengakses metode singleton di sepanjang baris ini:
MySingleton.INSTANCE.doSomething();
String something = MySingleton.INSTANCE.getSomething();
Penggunaan enum, alih-alih kelas, adalah, seperti yang telah disebutkan dalam jawaban lain, kebanyakan tentang instantiasi single-safe thread dan jaminan bahwa itu akan selalu hanya satu salinan.
Dan, mungkin, yang paling penting, bahwa perilaku ini dijamin oleh JVM itu sendiri dan spesifikasi Java.
Berikut adalah bagian dari spesifikasi Java tentang bagaimana beberapa instance dari instance enum dicegah:
Tipe enum tidak memiliki instance selain yang didefinisikan oleh konstanta enumnya. Ini adalah kesalahan waktu kompilasi untuk mencoba secara eksplisit instantiate tipe enum. Metode klon terakhir dalam Enum memastikan bahwa konstanta enum tidak pernah dapat dikloning, dan perlakuan khusus oleh mekanisme serialisasi memastikan bahwa instance duplikat tidak pernah dibuat sebagai hasil deserialisasi. Instansiasi reflektif dari tipe enum dilarang. Bersama-sama, keempat hal ini memastikan bahwa tidak ada contoh jenis enum ada di luar yang didefinisikan oleh konstanta enum.
Yang perlu diperhatikan adalah bahwa setelah instantiasi masalah keamanan thread harus ditangani seperti di kelas lain dengan kata kunci yang disinkronkan dll.