Câu trả lời của @ Lyle khá nguy hiểm và tôi đã thấy nó không hoạt động đặc biệt nếu bạn biến enum thành một lớp bên trong tĩnh. Thay vào đó, tôi đã sử dụng một cái gì đó như thế này để tải các bản đồ BootstrapSingleton trước enum.
Chỉnh sửa điều này không còn là vấn đề nữa với các JVM hiện đại (JVM 1.6 trở lên) nhưng tôi nghĩ vẫn còn vấn đề với JRebel nhưng tôi chưa có cơ hội kiểm tra lại .
Tải cho tôi trước:
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>();
}
Bây giờ tải nó trong hàm tạo enum:
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);
}
}
Nếu bạn có một enum bên trong, bạn chỉ cần xác định Map bên trên định nghĩa enum và rằng (về lý thuyết) sẽ được tải trước đó.
stringMap
đầu khởi tạo). Giải pháp thông thường là sử dụng một lớp lồng nhau.