से एक enum फैक्ट्री विधि बनाएं मैंने कुछ क्रियाओं को परिभाषित करने के लिए एक Enum बनाया है। बाहरी एपीआई के खिलाफ प्रोग्रामिंग मुझे इस क्रिया को व्यक्त करने के लिए Integer
का उपयोग करने के लिए मजबूर होना पड़ता है। यही कारण है कि मैंने अपने एनम में एक पूर्णांक उदाहरण फ़ील्ड जोड़ा है। यह ordinal()
पर निर्भर होने के बजाय या values()[index]
का उपयोग करके एनम स्थिरांक के आदेश के बजाय, जोशुआ ब्लोच के प्रभावी जावा के साथ समझौता किया जाना चाहिए।एक अद्वितीय उदाहरण मान
public enum Action {
START(0),
QUIT(1);
public final int code;
Protocol(int code) {
this.code = code;
}
}
मैं एपीआई से एक पूर्णांक मूल्य what
हो और अब मैं इसे से बाहर एक Enum मूल्य बनाना चाहते हैं, कैसे मैं सबसे सामान्य फैशन में यह लागू कर सकते हैं?
जाहिर है, ऐसी फैक्ट्री विधि जोड़कर काम नहीं करेगा। आप एक एनम को तत्काल नहीं कर सकते हैं।
Action valueOf(int what) {
return new Action(what);
}
बेशक, मैं हमेशा एक स्विच-केस स्टेटमेंट बना सकता हूं और सभी संभावित कोड जोड़ सकता हूं और उचित स्थिरता वापस कर सकता हूं। लेकिन मैं उन्हें एक ही समय में दो स्थानों पर परिभाषित करना चाहता हूं।
आप सही आकार के साथ मानचित्र को प्रारंभ कर सकते हैं: 'नया हैश मैप <> (एक्शन.वैल्यूज() लम्बाई, 1);' (यदि कोई मूल्य नहीं है तो इससे कोई फर्क नहीं पड़ता है लेकिन इसकी कीमत नहीं है कुछ भी कर रहा है)। – assylias
@assylias मजेदार, मैंने स्रोत कोड में देखा है और निर्माता वास्तव में लोड कारक को अनदेखा करता है: * ध्यान दें कि यह कार्यान्वयन लोड फैक्टर को अनदेखा करता है; यह हमेशा 3/4 के लोड फैक्टर का उपयोग करता है। यह कोड को सरल बनाता है और आम तौर पर प्रदर्शन में सुधार करता है। * –
मुझे यह दिलचस्प नहीं पता था। – assylias