कंप्यूटरप्रोग्रामिंग

जावा जेनेरिक्स: विवरण और तरीके

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

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

जावा जेनेरिक्स: विवरण और उदाहरण

आइए नीचे दिए गए आंकड़े में सामान्य वर्ग के सामान्यीकरण को लागू करने का एक सरल उदाहरण देखें। और उसके बाद ही हम जावा जेनेरिक के सभी सूक्ष्मतरणों और बारीकियों की विस्तृत परीक्षा के लिए आगे बढ़ेंगे

ध्यान दें कि जोड़ी वर्ग को घोषित किया गया है। कक्षा के नाम के ठीक बाद, कोण कोष्ठक खोले जाते हैं, जिसमें पत्र टी दर्शाया जाता है। यह एक प्रकार का प्लेसहोल्डर है जिसे इस वर्ग के उदाहरण बनाते समय विशिष्ट प्रकार से बदल दिया जाएगा। ऐसा लगता है: जोड़ी <पूर्णांक> ओबज = नया जोड़ी <पूर्णांक> ()। यह ध्यान दिया जाना चाहिए कि टी के बजाय, आप कोई भी पत्र निर्दिष्ट कर सकते हैं, लेकिन, एक नियम के रूप में, टी, वी या ई का उपयोग करें।

नोट: जावा के आठवें संस्करण के साथ शुरू करते हुए, जब लिंक को घोषित किया जाता है, तो लक्ष्य प्रकार को निर्दिष्ट करते हुए, आप कंस्ट्रक्टर रिक्त में कोने को छोड़ सकते हैं। इसलिए ऊपर दिए गए उदाहरण को फिर से लिखा जा सकता है: जोड़ी <पूर्णांक> ओजज = नई जोड़ी <> ()

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

तर्क के बाद, पहले आर्टमेंट और दूसरी इटम, संबंधित निर्माता को पास किया गया, यह भी पूर्णांक या इसके उपवर्ग प्रकार का होना चाहिए। यदि आप किसी डेटा प्रकार को पास करने का प्रयास करते हैं जो ऑब्जेक्ट बनाया गया था, जो निर्दिष्ट किया गया था उससे अलग है, तो संकलक इस त्रुटि को नहीं छोड़ेगा। इसलिए, ऑब्जेक्ट बनाने के दौरान तर्क के साथ कन्स्ट्रक्टर का निम्न स्वरूप होगा: जोड़ी <पूर्णांक> ओजज = नई जोड़ी <> (नई पूर्णांक (1), नई पूर्णांक (2))। वही सेटफस्ट और सेटसेकंड विधियों के लिए तर्कों पर लागू होता है। और जैसा कि आप शायद पहले से ही अनुमान लगा चुके हैं, getFirst और getSecond तरीकों से इंटिजर प्रकार के मान वापस आएंगे।

कई प्रकार के मापदंडों के साथ सामान्य श्रेणी

सामान्य वर्गों में, आप कई प्रकार के मापदंडों को भी घोषित कर सकते हैं जो कि कोण कोष्ठक में निर्दिष्ट किए जाते हैं, अल्पविराम से अलग होते हैं। इस मामले के लिए जोड़ी वर्ग नीचे दिए गए चित्र में प्रस्तुत किया गया है।

जैसा कि आप देख सकते हैं, इस तरह के एक वर्ग का एक उदाहरण बनाते समय समान प्रकार की संख्या को कोण कोष्ठक में निर्दिष्ट किया जाना चाहिए। यदि आप मानचित्र के रूप में इस प्रकार की डेटा संरचना से परिचित हैं, तो आप यह देख सकते हैं कि वहां एक ही सिद्धांत का उपयोग किया जाता है। वहां, पहला तर्क कुंजी के प्रकार को निर्दिष्ट करता है, और दूसरा मान का प्रकार निर्दिष्ट करता है। यह ध्यान दिया जाना चाहिए कि ऑब्जेक्ट सृजन को दिए गए तर्कों के प्रकार समान हो सकते हैं। इसलिए, जोड़ी वर्ग के एक उदाहरण के निम्नलिखित घोषणा बिल्कुल सही है: जोड़ी <स्ट्रिंग, स्ट्रिंग> obj।

सामान्यीकरण की कुछ विशेषताएं

आगे बढ़ने से पहले, यह ध्यान दिया जाना चाहिए कि जावा कंपाइलर जोड़े वर्ग के किसी भी अलग संस्करण नहीं बनाते हैं। वास्तव में, संकलन प्रक्रिया के दौरान, सामान्य प्रकार के बारे में सारी जानकारी नष्ट हो जाती है। इसके बजाय, संबंधित प्रकार डाली जाती हैं, जोड़ी वर्ग के विशेष संस्करण का निर्माण करते हैं। हालांकि, कार्यक्रम में अभी भी इस वर्ग का एक सामान्यीकृत संस्करण है। इस प्रक्रिया को जावा सामान्य प्रकार की सफाई में कहा जाता है।

चलो एक महत्वपूर्ण बिंदु पर ध्यान दें। एक ही जावा सामान्य वर्ग के विभिन्न संस्करणों के लिए लिंक समान ऑब्जेक्ट को इंगित नहीं कर सकते। यही है, मान लीजिए कि हमारे पास दो लिंक हैं: जोड़ी <पूर्णांक> ओजज 1 और जोड़ी <डबल> ओबजी 2 इसलिए, लाइन में obj1 = obj2 त्रुटि उत्पन्न होती है। हालांकि दोनों चर प्रकार की जोड़ी हैं, वे जो वस्तुओं का उल्लेख करते हैं वे अलग-अलग हैं। यह जावा जेनेरिक में प्रकार की सुरक्षा का एक ज्वलंत उदाहरण है।

सामान्यीकृत कक्षाओं पर लगाए गए प्रतिबंध

यह जानना ज़रूरी है कि सामान्यीकरण केवल संदर्भ प्रकारों पर ही लागू किया जा सकता है, अर्थात, जेनेरिक क्लास जावा वर्चुअल में दिए गए तर्क को आवश्यक रूप से क्लास का प्रकार होना चाहिए। उदाहरण के लिए, ऐसे सरल प्रकार के रूप में, दोगुना या लंबा, प्रेषित नहीं किया जा सकता है। दूसरे शब्दों में, जोड़ी वर्ग की घोषणा की निम्नलिखित पंक्ति मान्य नहीं है: जोड़ी obj हालांकि, यह सीमा एक गंभीर समस्या नहीं है, चूंकि जावा में प्रत्येक आदिम प्रकार के लिए संबंधित आवरण वर्ग है। कड़ाई से बोलते हुए, यदि आप जोड़ वर्ग में एक पूर्णांक और तार्किक मूल्य को समापित करना चाहते हैं, तो ऑटो पैक आपके लिए सब कुछ करेगा: जोड़ी <पूर्णांक, बूलियन> ओबज = नई जोड़ी <> (25, सच)

एक अन्य गंभीर सीमा एक प्रकार पैरामीटर का एक उदाहरण बनाने की असंभव है। इसलिए, निम्नलिखित पंक्ति एक संकलन त्रुटि का कारण होगा: T first = new T () यह स्पष्ट है, क्योंकि आपको पहले से नहीं पता है कि कोई पूर्ण श्रेणी या एक सार इंटरफ़ेस तर्क के रूप में पारित किया जाएगा। वही एरेज़ बनाने के लिए चला जाता है

सीमित प्रकार

अक्सर ऐसी स्थितिें होती हैं, जब उन प्रकार की सूची को सीमित करना आवश्यक होता है जिन्हें जावा सामान्य वर्ग के तर्क के रूप में पारित किया जा सकता है। मान लीजिए कि हमारी जोड़ी वर्ग में हम उन पर और गणितीय परिचालनों के लिए केवल संख्यात्मक मानों को समापित करना चाहते हैं। ऐसा करने के लिए, हमें टाइप पैरामीटर की ऊपरी सीमा निर्धारित करने की आवश्यकता है। इसे एंगल कोष्ठक में पारित सभी तर्कों से विरासत में मिली एक सुपरक्लास घोषणा का उपयोग करके कार्यान्वित किया जाता है। यह इस प्रकार दिखाई देगा: क्लास जोय <टी विस्तारित संख्या>। इस तरह, कंपाइलर सीखता है कि टी पैरामीटर के बजाय, आप या तो नंबर क्लास या इसके उप-वर्गों में से किसी एक स्थानापन्न कर सकते हैं।

यह एक सामान्य तकनीक है इस तरह के प्रतिबंध अक्सर एक ही कक्षा में प्रकार पैरामीटर की संगतता सुनिश्चित करने के लिए उपयोग किया जाता है। हमारी जोड़ी वर्ग पर एक उदाहरण पर विचार करें: वर्ग की जोड़ी <टी, वी विस्तारित करता है> यहां हम कंपाइलर को बताते हैं कि टाइप टी, मनमानी हो सकता है, और टाइप वी या तो टाइप टी या इसके उप-वर्गों में से एक होना चाहिए

प्रतिबंध "नीचे से" ठीक उसी तरह से होता है, लेकिन शब्द के विस्तार के बजाय, शब्द सुपर लिखा है। यही है, क्लास जोय की घोषणा <टी सुपर अर्रे लिस्ट> इंगित करता है कि टी के बजाय, एक ArrayList या किसी वर्ग या इंटरफ़ेस जो इसे संभालते हैं वह प्रतिस्थापित किया जा सकता है।

सामान्य जावा विधियों और कन्स्ट्रक्टर्स

जावा सामान्यीकरण में कक्षाओं के संबंध में न केवल लागू किया जा सकता है, बल्कि तरीकों को भी लागू किया जा सकता है। इसलिए, सामान्यीकृत विधि को सामान्य वर्ग में घोषित किया जा सकता है।

जैसा कि आप ऊपर दिए गए आंकड़े में देख सकते हैं, सामान्यीकृत विधि की घोषणा में कुछ भी जटिल नहीं है। वापसी प्रकार विधि से पहले कोण कोष्ठक को डालने और उन में प्रकार पैरामीटर निर्दिष्ट करने के लिए पर्याप्त है।

एक निर्माता के मामले में, सब कुछ उसी तरह किया जाता है:

इस मामले में कोण कोष्ठक कन्स्ट्रक्टर के नाम से पहले रखा गया है, क्योंकि यह कोई भी मान नहीं लौटाता है। दोनों कार्यक्रमों के काम का नतीजा होगा:

पूर्णांक

तार

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 hi.delachieve.com. Theme powered by WordPress.