जवाबों:
सामान्य तौर पर, एक रैपर क्लास कोई भी वर्ग होता है जो किसी अन्य क्लास या कंपोनेंट की कार्यक्षमता को "लपेटता है" या "इनकैप्सुलेट करता है"। ये अंतर्निहित वर्ग या घटक के कार्यान्वयन से अमूर्तता का स्तर प्रदान करके उपयोगी होते हैं; उदाहरण के लिए, COM घटक लपेटने वाले रैपर कक्षाएं इसके साथ कॉलिंग कोड को परेशान किए बिना COM घटक को लागू करने की प्रक्रिया का प्रबंधन कर सकती हैं। वे शामिल इंटरफ़ेस बिंदुओं को कम करके अंतर्निहित ऑब्जेक्ट के उपयोग को भी सरल कर सकते हैं; अक्सर, यह अंतर्निहित घटकों के अधिक सुरक्षित उपयोग के लिए बनाता है।
बस यह कैसा लगता है: एक वर्ग जो किसी अन्य वर्ग या एपीआई की कार्यक्षमता को सरल या केवल अलग एपीआई में "लपेटता है"।
रैपर कक्षाएं आदिम प्रकार की वस्तुओं का उपयोग करने का एक तरीका प्रदान करती हैं। प्रत्येक आदिम के लिए, हमारे पास एक रैपर वर्ग है जैसे,
int Integer
byte Byte
इंटेगर और बाइट आदिम इंट और बाइट के रैपर वर्ग हैं। ऐसे समय / प्रतिबंध हैं जब आपको प्राइमेटिव्स का उपयोग करने की आवश्यकता होती है क्योंकि ऑब्जेक्ट्स इसलिए रैपर कक्षाएं बॉक्सिंग / अनबॉक्सिंग नामक एक तंत्र प्रदान करती हैं।
संकल्पना को निम्न उदाहरण द्वारा अच्छी तरह समझा जा सकता है
double d = 135.0 d;
Double doubleWrapper = new Double(d);
int integerValue = doubleWrapper.intValue();
byte byteValue = doubleWrapper.byteValue();
string stringValue = doubleWrapper.stringValue();
इसलिए यह तरीका है, हम रैपर क्लास प्रकार का उपयोग अन्य आदिम प्रकारों में परिवर्तित करने के लिए कर सकते हैं। इस प्रकार के रूपांतरण का उपयोग तब किया जाता है जब आपको एक आदिम प्रकार को ऑब्जेक्ट में परिवर्तित करने और उन्हें अन्य प्राइमेटिव प्राप्त करने के लिए उपयोग करने की आवश्यकता होती है। इस दृष्टिकोण के लिए, आपको एक बड़ा कोड लिखने की आवश्यकता है। हालांकि, सरल कास्टिंग तकनीक के साथ ही प्राप्त किया जा सकता है क्योंकि नीचे कोड स्निपेट प्राप्त किया जा सकता है
double d = 135.0;
int integerValue = (int) d ;
हालांकि डबल मूल्य स्पष्ट रूप से पूर्णांक मूल्य में परिवर्तित हो जाता है जिसे डाउनकास्टिंग भी कहा जाता है।
एक रैपर क्लास को दूसरी क्लास लपेटने की जरूरत नहीं है। यह एक dll फ़ाइल में एक एपीआई वर्ग रैपिंग कार्यक्षमता हो सकती है।
उदाहरण के लिए, dll आवरण वर्ग बनाने के लिए यह बहुत उपयोगी हो सकता है, जो सभी dll आरंभीकरण और सफाई का ध्यान रखता है और वर्ग विधियाँ बनाता है जो कि उदाहरण से निर्मित फंक्शन पॉइंटर्स को लपेटता है। GetProcAddress()
।
चियर्स!
एक आवरण वर्ग एक ऐसा वर्ग है जो अपने नाम की तरह ही किसी और चीज़ के चारों ओर "लपेटता है"।
इसकी अधिक औपचारिक परिभाषा एक ऐसा वर्ग होगा जो एडाप्टर पैटर्न को लागू करता है । यह आपको एपीआई के एक सेट को अधिक उपयोगी, पठनीय रूप में संशोधित करने की अनुमति देता है। उदाहरण के लिए, C # में, यदि आप मूल Windows API का उपयोग करना चाहते हैं, तो यह उस वर्ग में लपेटने में मदद करता है जो .NET .NET दिशानिर्देशों के अनुरूप है।
कई डिज़ाइन पैटर्न हैं जिन्हें रैपर क्लासेस कहा जा सकता है।
मेरा जवाब देखें " प्रॉक्सी, डेकोरेटर, एडॉप्टर और ब्रिज पैटर्न कैसे भिन्न होते हैं? "
यह भी ध्यान देना मूल्यवान हो सकता है कि कुछ वातावरणों में, रैपर कक्षाएं जो कर सकती हैं उनमें से अधिकांश को पहलुओं द्वारा प्रतिस्थापित किया जा रहा है।
संपादित करें:
सामान्य तौर पर एक रैपर इस बात का विस्तार करने वाला है कि रैपे के कार्यान्वयन के बारे में चिंतित हुए बिना, रैपर क्या करता है, अन्यथा रैपिंग क्लास को बढ़ाने या लपेटने का कोई मतलब नहीं है। एक विशिष्ट उदाहरण कुछ अन्य सेवा इंटरफ़ेस के आसपास समय की जानकारी या लॉगिंग कार्यक्षमता को जोड़ना है, जैसा कि उस इंटरफ़ेस के प्रत्येक कार्यान्वयन में इसे जोड़ने के विपरीत है।
यह तब पहलू प्रोग्रामिंग के लिए एक विशिष्ट उदाहरण है। फ़ंक्शन द्वारा एक इंटरफ़ेस फ़ंक्शन के माध्यम से जाने और बॉयलरप्लेट लॉगिंग को जोड़ने के बजाय, पहलू प्रोग्रामिंग में आप एक बिंदु को परिभाषित करते हैं, जो कि तरीकों के लिए एक नियमित अभिव्यक्ति है, और फिर उन तरीकों की घोषणा करें जिन्हें आप पहले या बाद में मेल खाते हुए निष्पादित करना चाहते हैं। बिंदु। शायद यह कहना उचित है कि पहलू प्रोग्रामिंग डेकोरेटर पैटर्न का एक प्रकार का उपयोग है, जिसके लिए रैपर कक्षाएं भी इस्तेमाल की जा सकती हैं, लेकिन दोनों प्रौद्योगिकियों के अन्य उपयोग हैं।
रैपर क्लास एक ऐसी क्लास है जो दूसरी क्लास को लपेटती है और क्लाइंट और ओरिजिनल क्लास को लपेटे जाने के बीच अमूर्तता प्रदान करती है।
एक आवरण वर्ग आमतौर पर एक ऐसा वर्ग होता है जिसमें एक निजी संपत्ति के रूप में एक वस्तु होती है। रैपर उस निजी ऑब्जेक्ट के एपीआई को लागू करता है और इसलिए इसे एक तर्क के रूप में पारित किया जा सकता है जहां निजी ऑब्जेक्ट होगा।
कहते हैं कि आपके पास एक संग्रह है, और आप कुछ प्रकार के अनुवाद का उपयोग करना चाहते हैं जब वस्तुओं को इसमें जोड़ा जाता है - आप एक आवरण वर्ग लिखते हैं जिसमें संग्रह के सभी तरीके हैं। जब ऐड () कहा जाता है, तो रैपर केवल निजी संग्रह में पारित करने के बजाय तर्कों का अनुवाद करते हैं।
आवरण का उपयोग कहीं भी किया जा सकता है एक संग्रह का उपयोग किया जा सकता है, और निजी ऑब्जेक्ट में अभी भी अन्य ऑब्जेक्ट हो सकते हैं जो इसे संदर्भित करते हैं और इसे पढ़ रहे हैं।
रैपर क्लास एक ऐसी क्लास है जिसका इस्तेमाल क्लाइंट और ओरिजिनल क्लास के लिपटे होने के बीच अप्रत्यक्ष और अमूर्त की एक परत जोड़ने के लिए दूसरी क्लास को लपेटने के लिए किया जाता है।
रैपर क्लास एक आदिम डेटा प्रकार के आसपास एक आवरण है। यह अपने संबंधित वर्ग उदाहरणों में आदिम डेटा प्रकारों का प्रतिनिधित्व करता है। जैसे बुलियन डेटा प्रकार को बूलियन वर्ग उदाहरण के रूप में दर्शाया जा सकता है। जावा में सभी आदिम आवरण वर्ग अपरिवर्तनीय हैं यानी एक बार एक आवरण वर्ग के उदाहरण के लिए एक मूल्य सौंपा जाने के बाद इसे और नहीं बदला जा सकता है।
जावा प्रोग्रामिंग प्रत्येक आदिम डेटा प्रकारों के लिए रैपर क्लास प्रदान करता है, रैपर क्लास की वस्तु के अनुरूप एक आदिम डेटा प्रकार परिवर्तित करने के लिए।
प्रोग्रामर की एक बुनियादी जरूरत को पूरा करने के लिए रैपर कक्षाएं अस्तित्व में आईं - यानी जहां भी वस्तुओं की अनुमति है वहां आदिम मूल्यों का उपयोग करना। जैसा कि उनके नाम से पता चलता है कि रैपर कक्षाएं एक आदिम मूल्य के आसपास लपेटती हैं और एक वस्तु में मूल्य रखती हैं। इसलिए, उन सभी जगहों पर जहां आदिम लोगों को अनुमति नहीं थी - जैसे कि जेनरिक, हैशमैप-की, एरेइलिस्ट आदि - प्रोग्रामर के पास अब इन आदिम मूल्यों को उनके संबंधित आवरण प्रकारों के रूप में प्रदान करने का एक विकल्प है।
इसके अलावा इन आवरण प्रकारों में आदिम प्रकार से संबंधित आवरण प्रकारों और पीछे, और स्ट्रिंग्स से आवरण प्रकारों और पीठ तक परिवर्तित करने के लिए कई उपयोगिता विधियां हैं।
मैंने अपने ब्लॉग में रैपर कक्षाओं पर एक विस्तृत लेख लिखा है जो गहराई में रैपर प्रकारों की अवधारणा को स्पष्ट करता है - http://www.javabrahman.com/corejava/java-wrapper-classes-tutorial-with-examples/ (प्रकटीकरण) यह ब्लॉग मेरे स्वामित्व में है)
मैंने वर्तमान में अपनी परियोजना के लिए एक आवरण वर्ग का उपयोग किया है और मुझे मिलने वाले मुख्य लाभ (विषय विवरण को व्यापक बनाने के लिए सिर्फ एक ही लाभ):
अपवाद संभालना: मेरा मुख्य वर्ग, कि एक और वर्ग को लपेटता है, ऐसे तरीके हैं जो अपवादों को फेंकते हैं यदि कोई होता है, तो मैंने एक आवरण वर्ग बनाया जो अपवादों को संभालता है और उन्हें तुरंत लॉग करता है। इसलिए, मेरे मुख्य दायरे में, कोई अपवाद हैंडलिंग नहीं है। मैं सिर्फ एक विधि कहता हूं और कुछ करता हूं।
आसान उपयोग: मैं आसानी से वस्तु को शुरू कर सकता हूं। आम तौर पर दीक्षा चरण बहुत सारे चरणों का निर्माण किया जाता है।
कोड पठनीयता: जब कोई अन्य प्रोग्रामर मेरा कोड खोलता है, तो कोड बहुत स्पष्ट और हेरफेर करने में आसान प्रतीत होगा।
विवरण छिपाते हुए: यदि आप एक ऐसा वर्ग उत्पन्न कर रहे हैं जिसे कोई अन्य प्रोग्रामर उपयोग करने जा रहा है, तो आप "त्रुटि से निपटने, अपवाद को संभालने, संदेश भेजने और आदि ..." जैसे विवरण को लपेट सकते हैं ताकि प्रोग्रामर को संभालना न पड़े अराजकता, बस केवल तरीकों का उपयोग करता है।
एक आवरण वर्ग एक ऐसा वर्ग है जो किसी वस्तु को रखने और उसमें कुछ कार्यक्षमता जोड़ने का एकमात्र उद्देश्य रखता है। जावा में जब से आदिम (जैसे ints, floats, char ...) ऑब्जेक्ट नहीं हैं, यदि आप उन्हें एक की तरह व्यवहार करना चाहते हैं तो आपको एक आवरण वर्ग का उपयोग करना होगा। मान लीजिए कि आप एक सदिश स्याही बनाना चाहते हैं, तो समस्या यह है कि एक वेक्टर केवल उन वस्तुओं को धारण करता है जो आदिम नहीं हैं। तो तुम क्या करोगे एक इंटेगर आवरण में सभी ints डाल दिया है और उस का उपयोग करें। उदाहरण:
int number = 5;
Integer numberWrapped = new Integer(number);
//now you have the int in an object.
//and this is how to access the int value that is being wrapped.
int again = numberWrapped.intValue();
एक रैपर वह वर्ग है जिसका उपयोग विभिन्न प्लेटफ़ॉर्म के बीच दो अलग-अलग अनुप्रयोगों के बीच संवाद करने के लिए किया जाता है