जावा इनम ट्यूटोरियल: यह क्या है और इसे कैसे लागू करें?



Java Enum Tutorial का यह लेख आपको बेहतर समझ के लिए व्यावहारिक उदाहरण के साथ Enum स्थिरांक का विस्तृत ज्ञान प्रदान करेगा।

में प्रवेश एक वर्ग को निश्चित और नामित स्थिरांक के साथ परिभाषित करने का एक तरीका है कीवर्ड का उपयोग करना एनम। इसमें ' जावा इनम ट्यूटोरियल “लेख, हम सीखेंगेसाथ में गणना को परिभाषित करेंएक बेहतर समझ के लिए उदाहरण।

गणना क्या है?

जावा एनम ऐसी कक्षाएं हैं जिनमें स्थिरांक या चर का एक निश्चित समूह होता है जो बदलने की प्रवृत्ति नहीं रखते हैं। जावा में एन्यूमरेशन कीवर्ड का उपयोग करके प्राप्त किया जाता है एनम। जावा एनम स्थिरांक हैं स्थिर तथा अंतिम स्पष्ट रूप से। Enum सुविधा तब से उपलब्ध है JDK संस्करण 1.5।





हमें गणना की आवश्यकता क्यों है?

एनम बॉयलरप्लेट कोड से बचने के लिए रन-टाइम में त्रुटियों से बचने के लिए संकलन-समय पर जाँच में सुरक्षा को बेहतर बनाता है। उदाहरण के लिए, यदि आपको उपलब्ध विकल्पों में से कम से कम एक संभावना का चयन करना है, तो कहें,

काम प्रकार: (अनुबंध / अस्थायी / स्थायी)



जावा एनम ट्यूटोरियल कर्मचारी

तब सबसे अच्छा विकल्प एक का उपयोग करना होगा एनम। इसलिये एनम स्विच में आसानी से इस्तेमाल किया जा सकता है। एनम ट्रेस किया जा सकता है। एनम कर सकते हैं है फ़ील्ड, निर्माता और विधियाँ। इसलिये, यह संकलन-समय की जाँच को बढ़ाता है और अमान्य स्थिरांक में पास होने के कारण त्रुटियों से बचता है, क्योंकि आपने पहले ही दस्तावेज कर लिया है कि कौन से मूल्यों का उपयोग करना कानूनी है।

Enum और वर्ग के बीच अंतर

यद्यपि एक वर्ग और enum की जावा वातावरण में समान कार्यक्षमता है, वे कुछ पहलुओं में भिन्न हैं। आइए मतभेदों पर चर्चा करें



Enum कक्षा
एनम स्थिरांक को ओवरराइड नहीं किया जा सकता हैकक्षा में रहने वालों को ओवरराइड किया जा सकता है
Enum वस्तुओं के निर्माण का समर्थन नहीं करता हैकक्षा वस्तुओं के निर्माण का समर्थन करती है
एनम अन्य वर्गों का विस्तार नहीं कर सकता हैएक वर्ग अन्य वर्गों का विस्तार कर सकता है
एनम सीएक कार्यान्वयन इंटरफ़ेसएक वर्ग इंटरफ़ेस को लागू कर सकता है


Enum के व्यावहारिक उदाहरण

अब, एनम को बहुत बेहतर तरीके से समझने के लिए, निम्नलिखित के आधार पर कुछ व्यावहारिक उदाहरणों पर अमल करते हैं।

जावा में गणना को परिभाषित करना

एनम को एक वर्ग के अंदर या सी के बाहर घोषित किया जा सकता हैचलो। लेकिन, इसे किसी भी विधि के अंदर घोषित नहीं किया जा सकता है। आइए इसके सिंटैक्स, परिभाषा और घोषणा को समझने के लिए एक छोटा सा उदाहरण लें।

वाक्य - विन्यास:

एनम नाम {स्थिरांक}

इस उदाहरण में, हमने घोषणा की है मुख्य() तरीका के भीतर एनम

पैकेज की परिभाषा सार्वजनिक वर्ग Edureka {enum Level {BAJA, KTM, YAMAHA} सार्वजनिक स्थैतिक शून्य मुख्य (स्ट्रिंग [] args) {स्तर myVar = Level.KTM System.out.println (myVar)}

// ऊपुत

केटीएम

इस उदाहरण में, मुख्य() विधि घोषित है बाहर एनम का।

संकुल परिभाषा enum रंग {BAJAJ, KTM, YAMAHA} सार्वजनिक वर्ग Edureka {सार्वजनिक स्थैतिक शून्य मुख्य (स्ट्रिंग [] args) {बाइक b1 = Color.YAMAHA System.out.println (b1)}}

// आउटपुट:

यामाहा

स्विच केस में प्रयुक्त एनम

गणना का उपयोग स्विच स्टेटमेंट में भी किया जा सकता है। यह महत्वपूर्ण है कि सभी केस स्टेटमेंट्स को एक ही एनम से स्थिरांक का उपयोग करना चाहिए जैसा कि स्विच स्टेटमेंट द्वारा उपयोग किया जाता है। आइए इसके आधार पर एक उदाहरण देखें।

यहां, हम सप्ताह के दिनों के साथ अपने तत्वों के रूप में एक एनम की घोषणा करेंगे और हम मिलान मामले के डेटा को प्रिंट करने के लिए एक स्ट्रिंग के रूप में डेटा पास करेंगे।

पैकेज स्विचड एनम डे {SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY} पब्लिक क्लास Edureka {डे दिन पब्लिक एडुर्का (दिन दिन) {this.day = day} public void dayIsLike () {स्विच (केस) {केस (दिन) MONDAY: System.out.println ('Hi, Today is Monday') ब्रेक केस TUESDAY: System.out.println ('Hi, Today is मंगलवार') ब्रेक केस WEDNESDAY: System.out.println ('Hi, Today is Wednesday] ') ब्रेक केस THURSDAY: System.out.println (' Hi, Today is Friday ') ब्रेक केस FRIDAY: System.out.println (' हेलो, आज शुक्रवार है। ') ब्रेक केस SATURDAY: System.out.println (') नमस्ते, आज आपका वीकेंड है) ब्रेक का मामला SUNDAY: System.out.println ('Hi, Today is a Holiday') ब्रेक डिफ़ॉल्ट: System.out.println ('कृपया एक वैध दिन दर्ज करें।') ब्रेक}} सार्वजनिक स्थैतिक शून्य मुख्य (स्ट्रिंग [] args) {स्ट्रिंग str = 'MONDAY' Edureka e1 = नया Edureka (Day.valueOf (str)) e1.dayIsLike ()}}

// आउटपुट:

हाय, आज हैसोमवार

Enum का उपयोग करके वंशानुक्रम

मूल रूप से, कोई भी एनम को एक वर्ग के रूप में दर्शाया गया है जो अमूर्त वर्ग java.lang का विस्तार करता है। Enum और कई स्थिर सदस्य हैं। इसलिए, ए एनम किसी अन्य वर्ग का विस्तार नहीं कर सकते या एनम कोई बहु नहीं है विरासत । इसे बेहतर तरीके से समझने के लिए एक उदाहरण पर अमल करते हैं।

यहां, हम फोन निर्माता के आधार पर ओएस का वारिस करेंगे।

पैकेज वंशानुक्रम आयात java.util.ArrayList आयात java.util.List सार्वजनिक वर्ग Edureka {सार्वजनिक स्थैतिक शून्य मुख्य (स्ट्रिंग [] args) {सूची वंशानुक्रम = नया ArrayList () inherit .add (LibraryEnum.FIRST) inherit.add (ClientEnum)। google) (HTTPMethodConvertible element: inherit) {System.out.println (element.getHTTPMethodType ())}}} स्थिर इंटरफ़ेस HTTPMethodConvertible {public स्ट्रिंग StHTTPMethodType ()} static enum LibraryEnum इम्प्लिमेंट्स HTTPMethodConvertible (FIRMCP) 'हुआवेई'), THIRD ('Apple 11 Pro') स्ट्रिंग httpMethodType LibraryEnum (स्ट्रिंग फोन) {httpMethodType = फ़ोन} सार्वजनिक स्ट्रिंग getHTTPMethodType () (वापसी httpMethodType)} स्थैतिक Enum ClientEnum औजारों को HTTPMethodCypevert (} {huawei {}} ('iOS'), google ('एंड्रॉइड वन') स्ट्रिंग httpMethodType ClientEnum (स्ट्रिंग s) {httpMethodType = s} सार्वजनिक स्ट्रिंग getHTTPMethodType () {{http: //ethethethodType}}}

// आउटपुट:

Google पिक्सेल
एंड्रॉयड वन

अनुकूलित मूल्यों के साथ Enum

Enums के डिफ़ॉल्ट रूप से अपने स्वयं के स्ट्रिंग मान हैं, हम कुछ कस्टम मान को भी निर्दिष्ट कर सकते हैं। आइए हम नीचे दिए गए उदाहरण पर विचार करें।

एनम ट्रैफ़िक {RED ('STOP'), ऑरेंज ('वॉइट'), GREEN ('GO')}

उपरोक्त उदाहरण में, हम देख सकते हैं कि ट्रैफिक एनम के तीन सदस्य हैं। अर्थात्

लाल संतरा तथा हरा के साथ अपने अलग कस्टम मूल्य हैं रोक, WAIT तथा जाओ क्रमशः।

अब कोड में एक ही प्रकार के एनम का उपयोग करने के लिए हमें कुछ बिंदुओं का पालन करने की उम्मीद है:

  • हमें बनाने की जरूरत है पैरामीटर का निर्माण इस एनम वर्ग के लिए। क्योंकि हम जानते हैं कि एनम क्लास के ऑब्जेक्ट को स्पष्ट रूप से नहीं बनाया जा सकता है, इसलिए हम आरंभ करने के लिए पैरामीटर पैरामीटर का उपयोग करते हैं।
  • बिल्डर जनता नहीं हो सकती या संरक्षित नहीं होनी चाहिए निजी या चूक संशोधक। यदि हम सार्वजनिक या संरक्षित बनाते हैं, तो यह एक से अधिक वस्तुओं को शुरू करने की अनुमति देगा जो पूरी तरह से खिलाफ हैं enum कार्यक्षमता।
  • हमें मान प्राप्त करने के लिए एक गेटर विधि तैयार करनी होगी एनम।

आइए हम इसके आधार पर एक कार्यक्रम निष्पादित करें।

पैकेज ट्रैफ़िक एनम ट्रैफ़िकसिग्नल {RED ('STOP'), GREEN ('GO'), ऑरेंज ('WAIT') निजी स्ट्रिंग एक्शन पब्लिक स्ट्रिंग getAction () {return this.act} निजी ट्रैफ़िकसिग्नल (स्ट्रिंग एक्शन) {this.action = कार्रवाई}} सार्वजनिक वर्ग Edureka {सार्वजनिक स्थैतिक शून्य मुख्य (स्ट्रिंग args []) {ट्रैफिकसिग्नल [] सिग्नल = TrafficSignal.values ​​() के लिए (ट्रैफिकसिग्नल सिग्नल: सिग्नल) {System.out.print_n ('नाम:' + signal.name () + 'क्रिया:' + signal.getAction ())}}}

// आउटपुट:

नाम: RED क्रिया: STOP
नाम: GREEN कार्रवाई: GO
नरe: ORANGE कार्रवाई: WAIT

अगर-और-अगर बयानों में Enum

अब, इसके आधार पर एक प्रोग्राम निष्पादित करते हैं en-if-if-if स्टेटमेंट्स में। यहां, हम एनम में उपलब्ध दिशाओं के मूल्यों को पारित करके ट्रैवर्सल की दिशा पाएंगे।

संकुल दिशा-निर्देश enum दिशाएँ {EAST, WEST, NORTH, SOUTH} सार्वजनिक वर्ग Edureka {सार्वजनिक स्थैतिक शून्य मुख्य (स्ट्रिंग args []) {दिशाएँ dir = दिशाएँ .NORTH if (dir = Directions.EAST) {System.out.println ( 'दिशा: पूर्व')} और अगर (dir == दिशाएँ)) {System.out.println ('दिशा: पश्चिम')} और अगर (dir == Directions.NORTH) {System.out.println ('दिशा) : उत्तर ')} और {{System.out.println (' दिशा: दक्षिण ')}}}

// आउटपुट:

कहते हैंउद्धरण: उत्तर

एनम के साथ उपयोग किए जाने वाले विभिन्न तरीके

मान (): जब आप एक एनम बनाते हैं, तो जावा संकलक आंतरिक रूप से जोड़ता है मान () तरीका। यह विधि ए रिटर्न सरणी एनम के सभी मूल्यों से युक्त।

//वाक्य - विन्यास:

सार्वजनिक स्थिर एनुम-प्रकार [] मान ()

हम एक सरणी में किसी विशेष तत्व के सूचकांक मूल्य का पता लगाएंगे।

पैकेज मान enum रंग {RED, GREEN, BLUE} सार्वजनिक वर्ग Edureka {सार्वजनिक स्थैतिक शून्य मुख्य (स्ट्रिंग [] args) {Color arrest [] = Color.values ​​() for (Color col: arr) {System.out.println ( col + 'at index' + col.ordinal ())} System.out.println (Color.valueOf ('RED'))}}

// आउटपुट:

सूचकांक ० पर लाल
सूचकांक 1 पर GREEN
सूचकांक 2 पर जारी
नेट

का मूल्य(): यहविधि का उपयोग एन्यूमरेशन स्थिरांक को वापस करने के लिए किया जाता है जिसका मान बराबर होता है इस पद्धति को कॉल करते समय एक तर्क के रूप में पारित किया गया।

संदर्भ c ++ उदाहरण द्वारा कॉल करें

//वाक्य - विन्यास:

सार्वजनिक स्थिर एनम-प्रकार valueOf (स्ट्रिंग str)

यहां, हम स्ट्रिंग पर पास किए गए इनपुट के आधार पर एक विशेष फोन की लागत पाएंगे।

पैकेज वैल्यूफॉर्स एनम मोबाइल {सैमसंग (१० ९९), एपल (१२५०), गूगल (१३२५) इंट प्राइस मोबाइल (इंट पी) {प्राइस = पी} इंट शोप्रिस () {रिटर्न प्राइस}} पब्लिक क्लास एडुर्का {पब्लिक स्टेटिक नाइड मेन (स्ट्रिंग args []) {System.out.println ('सेलफोन सूची:') के लिए (मोबाइल m: Mobile.values ​​()) {System.out.println (m + 'लागत' + m.showPrice () + 'डॉलर') )} मोबाइल रिट रिट = Mobile.valueOf ('सैमसंग') System.out.println ('चयनित:' + रिटेल)}}

// आउटपुट:

सैमसंग की कीमत 1099 डॉलर है
Apple की कीमत 1250 डॉलर है
Google की लागत 1325 डॉलर है
चयनित: सैमसंग

साधारण (): जावा दुभाषिया जोड़ता है क्रमिक () विधि आंतरिक रूप से जब यह एक बनाता है एनम। ऑर्डिनल () विधि रिटर्न करती है सूचकांक एनम मूल्य का।

//वाक्य - विन्यास:

सार्वजनिक अंतिम अंतरदेशीय ()

यहां, हम किसी विशेष तत्व के सूचकांक मान को एक सरणी में पाएंगे। और यह भी, चेरी फल की स्थिति।

पैकेज ऑर्डिनल एनम फ्रूट्स {सेब, केला, चेरी, खजूर, एल्डरबेरी} एनम वेजिटेबल्स {गाजर, चुकंदर, बीन्स, टमाटर, प्याज} पब्लिक क्लास Edureka {पब्लिक स्टेटिक वोड मेन (स्ट्रिंग) [args) {फ्रूट्स] फल = फल। मान () के लिए (फ्रूट्स फ्रूट: फ्रु) {सिस्टम.आउट.प्रिंटल (फ्र + ’: '+ फ्र.ऑर्डिनल ())} फ्रूट्स एफ 1, एफ 2, एफ 3 एफ 1 = फ्रूट्स.प्ले एफ 2 = फ्रूट्स.क्राइस्री एफ 3 = फ्रूट्स.ऐपल if (f2.compareTo (f1)> 0) {System.out.println (f2 + '' + f1) के बाद आता है} सब्जियां v1 = सब्जियां। अगर (f1.equals (v1)) {System.out.println (') गलत ')}}}

// आउटपुट:

सेब: 0
केला: १
चेरी: 2
दिनांक: ३
एल्डरबेरी: 4
Apple के बाद चेरी आती है

Enum के लाभ

  • जावा में Enum सुधरता है प्रकार की सुरक्षा
  • Enum को आसानी से प्रयोग करने योग्य बनाया गया है मामलों को स्विच करें
  • एनम हो सकती है फंस गया
  • Enum हो सकता है फ़ील्ड, विधियाँ, तथा निर्माता
  • एनम लागू कर सकते हैं इंटरफेस
  • Enum एक का विस्तार नहीं कर सकता कक्षा क्योंकि आंतरिक रूप से, इसका विस्तार होता है Enum कक्षा

Enum Usecase: रॉक, पेपर, कैंची गेम

हम इस्तेमाल करेंगे एनम जावा में हमारे बचपन का खेल बनाने के लिए, द रॉक (पत्थर) कागज और कैंची । निम्नलिखित कोड बताते हैं कि कैसे।

पैकेज Edureka import java.util. आयामी आयात java.util.Scanner enum HandSign {SCISSOR, PAPER, STONE} सार्वजनिक वर्ग SPS {सार्वजनिक स्थैतिक शून्य मुख्य (स्ट्रिंग [] args) (रैंडम यादृच्छिक = नया यादृच्छिक) (बूलियन गेमऑवर = गलत हस्तलिपि playerMove = HandSign.SCISSOR HandSign computerMove int numTrials = 0 int numComputerWon = 0 int numPlayerWon = 0 int numTie = 0 Scanner in = new Scanner (System.in) System.out.println ('nLet us start ... n') जबकि जबकि (! gameOver) {System.out.printf ('% nScissor-Paper-Stonen') बूलियन वैधइन्पुट करते हैं {System.out.print ('nyour बारी (कृपया कैंची के लिए दर्ज करें, कागज के लिए p, पत्थर के लिए, q) पद छोड़ना): n ') char inChar = in.next ()। toLowerCase ()। charAt (0) validInput = true if (inChar ==' q ') {gameOver = true} अगर (inChar ==' s ') ) {playerMove = HandSign.SCISSOR} और यदि (inChar == 'p') {playerMove = HandSign.PAPER} और यदि (inChar == 't') {playerMove = HandSign.STONE} बाकी {System.out.println ( 'n कृपया कृपया इनपुट की जाँच करें और पुन: प्रयास करें! n') मान्य (गलत)}} (जबकि! वैल) idInput) if ((gameOver) {int aRandomNumber = random.nextInt (3) अगर (aRandomNumber == 0) {computerMove = HandSign.SCISSOR System.out.print.nn ('nIt's My turn: SCISSORn')} और अगर (aRandomNumber =) = 0) {computerMove = HandSign.PAPER System.out.println ('nIt's मेरी बारी: PAPERn')} बाकी {computerMove = HandSign.STONE System.out.println ('nIt's My turn: STONEn')} if (computerMove = = playerMove) {System.out.println ('nIt's a Tie! n') ++ numTie} और यदि (computerMove == HandSign.SCISSOR और amp खिलाड़ी amp = amp; amp; खिलाड़ी खिलाड़ी == HandSign.PAPER) {System.out.println ('nScissor कट पेपर) , मैं जीता! N ') ++ numComputerWon} और अगर (computerMove == HandSign.PAPER & amp & amp; खिलाड़ी खिलाड़ी करें == HandSign.STONE) {System.out.println (' naper आवरण पत्थर, मैं जीता! N ') ++ numComputerWon} अगर (computerMove == HandSign.STONE और amp & amp; खिलाड़ी खिलाड़ी == HandSign.SCISSOR) {System.out.println ('nStone कैंची तोड़ता है, तो मैं जीत गया! n') ++ComputerWon} और {System.out.println ('nCongratulations) ..! आपने जीत लिया! N ') ++ numPlayerWon} ++ numTrials}} System.out.printf ('% nThe परीक्षणों की संख्या: '+ numTrials) System.out.printf (' मैंने% d (%। 2f %%) जीता। । आपने% d (%। 2f %%) जीत लिया।% n ', numComputerWon, 100.0 * numComputerWon / numTrials, numPlayerWon, 100.0 * numPlayerWon (numTrials) System.out.println (' Bye !, आशा है कि आपको मज़ा आया ..!) )}}

// आउटपुट:

हमें शुरू करने दें...
कैंची-कागज-पत्थर
आपकी बारी (कृपया कैंची के लिए दर्ज करें, कागज के लिए पी, पत्थर के लिए टी, छोड़ने के लिए क्यू):
एस
यह मेरी बारी है: पत्थर
पत्थर तोड़ती कैंची, मैं जीता!
कैंची-कागज-पत्थर
आपकी बारी (कृपया कैंची के लिए दर्ज करें, कागज के लिए पी, पत्थर के लिए टी, छोड़ने के लिए क्यू):
क्या प
परीक्षणों की संख्या: 1I ने 1 (100.00%) जीता। आपने 0 (0.00%) जीते।
अलविदा !, आशा है कि आपको मज़ा आया ..!

इसके साथ, हम इस जावा एनम ट्यूटोरियल के अंत में आते हैं। मुझे आशा है कि आपने जावा में एनम और उसके कार्यान्वयन को कुछ वास्तविक समय के उदाहरणों के माध्यम से समझा होगा।

अब आप समझ गए होंगे एनम इस 'जावा Enum ट्यूटोरियल' के माध्यम से मूल बातें बाहर की जाँच करें 250,000 से अधिक संतुष्ट शिक्षार्थियों के एक नेटवर्क के साथ एक विश्वसनीय ऑनलाइन शिक्षण कंपनी, एडुरेका द्वारा, दुनिया भर में फैली हुई है। एडुर्का के जावा J2EE और SOA प्रशिक्षण और प्रमाणन पाठ्यक्रम उन छात्रों और पेशेवरों के लिए डिज़ाइन किए गए हैं जो जावा डेवलपर बनना चाहते हैं। पाठ्यक्रम आपको जावा प्रोग्रामिंग में एक शुरुआत देने के लिए डिज़ाइन किया गया है और आपको हाइबरनेट और जैसे विभिन्न जावा फ्रेमवर्क के साथ कोर और उन्नत जावा अवधारणाओं दोनों के लिए प्रशिक्षित करता है। वसंत

क्या आप हमसे कोई प्रश्न पूछना चाहते हैं? इस 'जावा एनम ट्यूटोरियल' ब्लॉग के टिप्पणी अनुभाग में उल्लेख करें और हम जल्द से जल्द आपको वापस मिलेंगे।