@ คำตอบของ Lyle ค่อนข้างอันตรายและฉันเห็นว่ามันใช้งานไม่ได้โดยเฉพาะถ้าคุณทำให้ Enum เป็นคลาสภายในที่คงที่ แต่ฉันได้ใช้สิ่งนี้ซึ่งจะโหลดแผนที่ BootstrapSingleton ก่อนที่จะ enums
แก้ไข นี้ไม่ควรจะมีปัญหาใด ๆ กับ JVMs ทันสมัย (JVM 1.6 หรือสูงกว่า) แต่ฉันไม่คิดว่ายังคงมีปัญหาเกี่ยวกับ JRebel แต่ฉันไม่ได้มีโอกาสที่จะสอบซ่อมมัน
โหลดฉันก่อน:
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>();
}
ตอนนี้โหลดไว้ในตัวสร้าง 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);
}
}
หากคุณมี enum ภายในคุณสามารถกำหนด Map ด้านบนนิยาม enum และควรโหลดก่อน (ในทางทฤษฎี)
stringMap
ค่าเริ่มต้น) วิธีแก้ไขปัญหาปกติคือใช้คลาสที่ซ้อนกัน