मैं माइकल बोर्गवर्ड और जॉन स्कीट से सहमत हूं कि EnumSet
पर ध्यान देने योग्य है। मैंने EnumSet
को आपके जैसे बिटवाई ऑपरेशंस पर चुना होगा, इसलिए मैं दिखाऊंगा कि EnumSet
का उपयोग कैसे करें।
यह अपने
Character
enum की तरह लग रहा
CharEnum
एक सा क्षेत्र है, जहां प्रत्येक enum सिर्फ एक बिट सेट के साथ एक पूर्णांक मान है की तरह इस्तेमाल किया जा रहा है (के अब से यह CharEnum
कॉल):
A = 00000000 00000000 00000000 00000001
B = 00000000 00000000 00000000 00000010
C = 00000000 00000000 00000000 00000100
D = 00000000 00000000 00000000 00001000
यह आपके लिए EnumSet
के समान है; इसमें एक आंतरिक बिट वेक्टर है जो स्वचालित रूप से प्रत्येक enum को long
पर थोड़ा सा असाइन करता है। इसके लिए JavaDoc कहते हैं, बिट झंडे "इस वर्ग के स्थान और समय के प्रदर्शन काफी अच्छा एक उच्च गुणवत्ता वाले, पारंपरिक पूर्णांक आधारित करने के लिए typesafe विकल्प के रूप में इसके उपयोग की अनुमति के लिए होना चाहिए।" "
यहाँ एक है यह कैसे
public enum CharEnum {
A, B, C, D;
}
और फिर
EnumSet<CharEnum> ch = /* from user */
if (ch.contains(CharEnum.A)) {
// some operation...
}
कोई ज़रूरत नहीं उपयोग करने के लिए तो यह बहुत सरल कोड है कहीं भी बिट्स निर्दिष्ट करने के लिए, का उदाहरण!
एक चेतावनी: यह केवल इसलिए काम करता है क्योंकि आपके सी # उदाहरण में enum मानों में से केवल एक बिट सेट होता है। आप इस तरह से एक enum मूल्य था:
E = 00011000 01110111 11100101 10000101
तो एक EnumSet
उचित नहीं होगा। उस स्थिति में आपको यहां अन्य उत्तरों में से एक को देखना चाहिए।
आपको कुछ कोष्ठक जोड़ना चाहिए: 'if ((ch.getMask() और CharEnum.A.getMask())> 0)' –
@ ट्राउ सॉफ्ट: फिक्स्ड, धन्यवाद। –