मैं बहुत सारी संख्याओं के साथ एक प्रोग्राम लिख रहा हूं, और मुझे EnumMap की कीसेट को बहुत कुछ वापस करना है। लेकिन EnumMap.keySet()
एक Set()
देता है, तो आदेश प्राप्त करने के लिए EnumSet
मैं चाहता हूँ, मैं एक डाली उपयोग करने के लिए:EnumMap <T> क्यों .keySet() एक सेट <T>() वापस करें और एनमसेट <T>() नहीं?
EnumMap<SomeEnum, Object> myMap = getMap();
EnumSet<SomeEnum> myEnum = (EnumSet<SomeEnum>) myMap.keySet();
अगर मैं डाली नहीं है, संकलक एक प्रकार मेल नहीं खाता की शिकायत करेंगे; यह Set<SomeEnum>
से EnumSet<SomeEnum>
में परिवर्तित नहीं कर सकता है। ऐसा करने के लिए अनावश्यक लगता है, क्योंकि एनमैप की चाबियाँ हमेशा एक गणना होगी। क्या किसी को पता है कि keySet()
विधि इस तरह क्यों बनाई गई थी? मैंने कभी सोचा है कि एनमसेट एक अमूर्त वर्ग होने के साथ ऐसा कुछ हो सकता है, लेकिन निश्चित रूप से EnumMap
EnumSet
प्रदान करने वाली फैक्ट्री विधि को वापस लौटा सकता है।
चीयर्स, सब!
संपादित करें: मुझे बहुत खेद है, उपरोक्त कोड CastClassException
फेंकता है। आप
EnumSet<SomeEnum> myEnum = EnumSet.copyOf(myMap.keySet());
का उपयोग कर EnumSet प्राप्त कर सकते हैं मुझे वास्तव में पोस्ट करने से पहले जांच करनी चाहिए थी।
आपको 'सेट' मिलता है। 'EnumSet ' होने का लाभ क्या होगा? –
@PaulBellora आप सही हैं, ऊपर गलत है। मैं इसे सही कर दूंगा। होना चाहिए 'एनमसेट myEnum = EnumSet.copyOf (myMap.keySet()); ' –
jalopezp
इनलाइन स्टाइल javadoc के साथ स्रोत का एक अच्छा दृश्य भी है: http://grepcode.com/file/repository.grepcode.com /java/root/jdk/openjdk/6-b14/java/util/EnumMap.java#EnumMap.keySet%28%29 –