Jawaban @ Lyle agak berbahaya dan saya telah melihatnya tidak bekerja terutama jika Anda membuat enum kelas dalam statis. Sebaliknya saya telah menggunakan sesuatu seperti ini yang akan memuat peta BootstrapSingleton sebelum enum.
Sunting ini seharusnya tidak menjadi masalah lagi dengan JVM modern (JVM 1.6 atau lebih tinggi) tapi saya pikir masih ada masalah dengan JRebel tapi saya belum punya kesempatan untuk menguji ulang .
Muat saya terlebih dahulu:
public final class BootstrapSingleton {
// Reverse-lookup map for getting a day from an abbreviation
public static final Map<String, Day> lookup = new HashMap<String, Day>();
}
Sekarang muat di enum constructor:
public enum Day {
MONDAY("M"), TUESDAY("T"), WEDNESDAY("W"),
THURSDAY("R"), FRIDAY("F"), SATURDAY("Sa"), SUNDAY("Su"), ;
private final String abbreviation;
private Day(String abbreviation) {
this.abbreviation = abbreviation;
BootstrapSingleton.lookup.put(abbreviation, this);
}
public String getAbbreviation() {
return abbreviation;
}
public static Day get(String abbreviation) {
return lookup.get(abbreviation);
}
}
Jika Anda memiliki enum bagian dalam, Anda bisa mendefinisikan Peta di atas definisi enum dan bahwa (secara teori) harus dimuat sebelumnya.
stringMap
inisialisasi). Solusi yang biasa adalah dengan menggunakan kelas bersarang.