@ लेल का जवाब खतरनाक है और मैंने देखा है कि यह विशेष रूप से काम नहीं करता है यदि आप enum को एक स्थिर आंतरिक कक्षा बनाते हैं। इसके बजाय मैंने इस तरह कुछ उपयोग किया है जो 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 है, तो आप सिर्फ enum परिभाषा ऊपर मानचित्र को परिभाषित करने और है कि कर सकते हैं में सिद्धांत) पहले लोड होना चाहिए।
स्रोत
2012-07-18 16:10:28
आईआईआरसी, जो एक एनपीई देता है क्योंकि स्थैतिक प्रारंभिकता नीचे की जाती है (यानी शीर्ष पर एनम स्थिरांक 'स्ट्रिंग मैप प्रारंभिकरण' तक पहुंचने से पहले बनाए जाते हैं)। सामान्य समाधान एक घोंसला वर्ग का उपयोग करना है। –
इस तरह की तीव्र प्रतिक्रिया के लिए सभी को धन्यवाद। (एफडब्ल्यूआईडब्ल्यू मुझे इस समस्या के लिए सूर्य जावाडॉक्स बहुत उपयोगी नहीं मिला)। –
लाइब्रेरी समस्या से यह वास्तव में एक भाषा मुद्दा है। हालांकि, मुझे लगता है कि एपीआई दस्तावेज़ जेएलएस (हालांकि शायद भाषा डिजाइनरों द्वारा नहीं) से अधिक पढ़े जाते हैं, इसलिए इस तरह की चीजें java.lang दस्तावेज़ों में अधिक महत्व रखनी चाहिए। –