@ लाइल का जवाब खतरनाक है और मैंने देखा है कि यह विशेष रूप से काम नहीं करता है यदि आप एनम को एक स्थिर आंतरिक वर्ग बनाते हैं। इसके बजाय मैंने कुछ इस तरह का उपयोग किया है जो कि बूटस्ट्रैपिंगलिंग मैप्स को एनमों से पहले लोड करेगा।
इसे संपादित करना आधुनिक 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>();
}
अब इसे एनम कंस्ट्रक्टर में लोड करें:
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);
}
}
यदि आपके पास एक आंतरिक एनम है तो आप बस एनम परिभाषा के ऊपर मैप को परिभाषित कर सकते हैं और यह (सिद्धांत में) पहले लोड होना चाहिए।
stringMap
आरंभीकरण के नीचे हो जाए )। सामान्य समाधान एक नेस्टेड वर्ग का उपयोग करना है।