दिलचस्प पोस्ट
$ http अनुरोधों में कुकी नहीं भेजता पता लगाएँ कि स्क्रॉल ईवेंट उपयोगकर्ता द्वारा बनाया गया था या नहीं माता-पिता सभी बच्चे की प्रक्रियाओं के लिए प्रतीक्षा करें Php जांचें कि स्ट्रिंग में चीनी वर्ण हैं MVC मॉडल से एक बाइट सरणी छवि प्रदर्शित करने के लिए कैसे ActionItem के लिए एनिमेटेड आइकन IntelliJ IDEA के भीतर SBT का उपयोग कर एक उबेर जार (फैट जार) कैसे बना सकता है? सी में एक पूर्णांक में उच्चतम सेट बिट (एमएसबी) को खोजने का सबसे तेज / सबसे कारगर तरीका क्या है? आर में डुप्लिकेट मान खोजें सूची दृश्य आइटम नहीं काम करें सभी भागने के पात्र क्या हैं? सूचक को प्रारूपित करने के लिए सही प्रारूप विनिर्देशक? स्थिति के आधार पर एक निश्चित मार्ग पर पुनर्निर्देशित करना रेल: update_attribute बनाम updates_attributes गतिशील परिस्थितियों के साथ रेल है

जावा में एक कन्स्ट्रक्टर निजी हो सकता है?

क्या एक निर्माता निजी हो सकता है? एक निजी कन्स्ट्रक्टर कैसे उपयोगी है?

वेब के समाधान से एकत्रित समाधान "जावा में एक कन्स्ट्रक्टर निजी हो सकता है?"

हां, एक निर्माता निजी हो सकता है इस के विभिन्न उपयोग हैं ऐसा ही एक प्रयोग सिंगलटन डिज़ाइन विरोधी-पैटर्न के लिए है , जिसका उपयोग मैं आपके विरुद्ध सलाह देगा। एक और, अधिक वैध उपयोग, कंसल्टेंट्स को नियुक्त करने में है; आप एक निर्माता बन सकते हैं जो बहुत से विभिन्न विकल्पों को लेता है जो वास्तव में एक कार्यान्वयन विवरण है, इसलिए आप इसे निजी बनाते हैं, लेकिन फिर अपने शेष कन्स्ट्रक्शंस इसे सौंपें।

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

 public class MyClass { private final String value; private final String type; public MyClass(int x){ this(Integer.toString(x), "int"); } public MyClass(boolean x){ this(Boolean.toString(x), "boolean"); } public String toString(){ return value; } public String getType(){ return type; } private MyClass(String value, String type){ this.value = value; this.type = type; } } 

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

कुछ और मामलों को देने के लिए जहां निजी कंस्ट्रक्टर उपयोग किए जाते हैं:

  1. एक अविश्वसनीय वर्ग बनाने के लिए जो केवल संबंधित स्थिर कार्यों का संग्रह होता है (यह मूल रूप से एक सिंगलटन है, लेकिन यदि यह स्टेटलेस है और स्थिर कार्य क्लास राज्य के बजाय पैरामीटर पर कड़ाई से कार्य करता है, तो यह मेरे लिए एक अनुचित दृष्टिकोण नहीं है पहले स्वयं को यह सुझाव देना प्रतीत होता है, यद्यपि एक अंतरफलक का इस्तेमाल करते हुए इंजेक्शन निर्भरता अक्सर एपीआई को बनाए रखना आसान बनाता है जब कार्यान्वयन में बड़ी संख्या में निर्भरता या संदर्भ के अन्य रूपों की आवश्यकता होती है)

  2. जब ऑब्जेक्ट बनाने के कई अलग-अलग तरीके होते हैं, तो एक निजी कन्स्ट्रक्टर इसे बनाने के विभिन्न तरीकों को समझने में आसान बना सकता है (उदाहरण के लिए, जो आपको new ArrayList(5) या ArrayList.createWithContents(5) ArrayList.createWithCapacity(5) , ArrayList.createWithContents(5) , ArrayList.createWithContents(5) , ArrayList.createWithContents(5) ArrayList.createWithInitialSize(5) )। दूसरे शब्दों में, एक निजी कंस्ट्रक्टर आपको फैक्ट्री फ़ंक्शन प्रदान करने की अनुमति देता है जिसका नाम अधिक समझ में आता है, और फिर कन्स्ट्रक्टर निजी बनाकर यह सुनिश्चित करता है कि लोग केवल अधिक आत्म-स्पष्ट नाम का उपयोग करें। यह आमतौर पर बिल्डर पैटर्न के साथ भी प्रयोग किया जाता है उदाहरण के लिए:

     MyClass myVar = MyClass .newBuilder() .setOption1(option1) .setOption2(option2) .build(); 

मुझे उम्मीद थी कि किसी ने इस (दूसरी बात) का उल्लेख किया होगा, लेकिन .. निजी निर्माणकों के तीन उपयोग हैं:

  • निम्नलिखित मामलों में वस्तु के बाहर तात्कालिकता को रोकने के लिए:

    • एकाकी वस्तु
    • कारखाना विधि
    • स्थिर-तरीकों-केवल (उपयोगिता) वर्ग
    • स्थिरांक केवल क्लास
  • Sublcassing (विस्तार) को रोकने के लिए यदि आप केवल एक निजी कन्स्ट्रक्टर बनाते हैं, तो कोई क्लास आपकी क्लास का विस्तार नहीं कर सकता, क्योंकि यह super() कन्स्ट्रक्टर को कॉल नहीं कर सकता है। यह final लिए किसी प्रकार का पर्याय है

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

हाँ यह कर सकते हैं। क्लास को तत्काल होने से रोकने के लिए एक निजी कंस्ट्रक्टर मौजूद होगा, या क्योंकि निर्माण केवल आंतरिक रूप से होता है, जैसे कि फैक्टरी पैटर्न अधिक जानकारी के लिए यहां देखें।

हाँ।

ऐसा इसलिए है कि आप कैसे नियंत्रित कर सकते हैं कि कक्षा को तत्काल कैसे किया जाए। यदि आप कन्स्ट्रक्टर को निजी बनाते हैं, और फिर एक दृश्य कन्स्ट्रक्टर पद्धति बनाते हैं जो क्लास के उदाहरण देता है, तो आप चीजों की संख्या को सीमित कर सकते हैं जैसे कि आमतौर पर एक उदाहरण है) या फिर रीसायकल उदाहरण या अन्य निर्माण संबंधी कार्य ।

new x() करना null कभी नहीं लौटाता है, लेकिन फ़ैक्टरी पैटर्न का उपयोग करके, आप null लौट सकते हैं, या यहां तक ​​कि विभिन्न उपप्रकार भी लौटा सकते हैं।

आप इसे उस क्लास के लिए भी इस्तेमाल कर सकते हैं जिसमें कोई इमेजिंग सदस्य या प्रॉपर्टी नहीं है, जो कि सिर्फ स्टैटिक हैं – जैसे कि युटिलिटी फंक्शन क्लास में।

ठीक है, अगर एक क्लास में आपके सभी तरीकों स्थिर हैं, तो एक निजी निर्माता एक अच्छा विचार है

निम्नलिखित कारणों से जावा में निजी कन्स्ट्रक्टरों को निरूपित किया जा सकता है

  1. जावा ऑब्जेक्ट्स के तात्कालिकता पर नियंत्रण रखने के लिए, यह आपको ऑब्जेक्ट का एक उदाहरण बनाने की अनुमति नहीं देगा।

  2. यह क्लास को उप-वर्ग के होने की अनुमति नहीं देता

  3. सिंगलटन पैटर्न को कार्यान्वित करते समय इसका एक विशेष लाभ होता है, निजी contstructors इसके लिए उपयोग किया जाता है और पूरे आवेदन के लिए उदाहरण बनाने पर नियंत्रण होता है।

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

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

हाँ।

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

हां, कक्षा में एक निजी निर्माता हो सकता है। कंस्ट्रक्टर को अन्य वर्गों से एक्सेस करने और परिभाषित वर्ग के भीतर इसे सुलभ रखने के लिए अस्वीकार करने की आवश्यकता है।

आप अपनी कक्षा के ऑब्जेक्ट को केवल आंतरिक रूप से क्यों बनाया जाना चाहते हैं? यह किसी भी कारण से किया जा सकता है, लेकिन एक संभावित कारण यह है कि आप सिंगलटन को लागू करना चाहते हैं। एक सिंगलटन एक डिज़ाइन पैटर्न होता है जो कि आपकी क्लास के केवल एक इंस्टॉलेशन को बनाया जा सकता है, और यह एक निजी कन्स्ट्रक्टर का उपयोग करके पूरा किया जा सकता है।

हां और इसका इस्तेमाल तात्कालिकता और बाद में ओवरराइड करने के लिए किया जाता है। यह अक्सर एकलटन कक्षाओं में उपयोग किया जाता है।

हाँ, एक निर्माता निजी हो सकता है एक निजी निर्माता किसी भी अन्य वर्ग को निजी कन्स्ट्रक्टर का उदाहरण पेश करने से रोकता है

 public class CustomHttpClient { private static HttpClient customHttpClient; /** A private Constructor prevents any other class from instantiating. */ private CustomHttpClient() { }} 

हाँ। कक्षा निजी कन्स्ट्रक्टर हो सकती है यहां तक ​​कि अमूर्त वर्ग के निजी निर्माता भी हो सकते हैं।

निर्माता निजी बनाने के द्वारा, हम उस क्लास के उप-क्लासिंग के साथ-साथ कक्षा को तत्काल होने से रोकते हैं।

निजी निर्माता के कुछ उपयोग यहां दिए गए हैं:

  1. सिंगलटन डिजाइन पैटर्न
  2. उदाहरण सृजन की संख्या को सीमित करने के लिए
  3. स्थैतिक कारखाने विधि का उपयोग करते हुए वस्तु निर्माण के लिए अर्थपूर्ण नाम देना
  4. स्टेटिक यूटिलिटी क्लास या कॉन्सटेंट क्लास
  5. उपवर्ग को रोकने के लिए
  6. बिल्डर डिजाइन पैटर्न और इस प्रकार अपरिवर्तनीय वर्ग बनाने के लिए

निजी कन्स्ट्रक्टर कॉलर द्वारा स्पष्ट रूप से इन्स्टिट्यूशन होने से एक क्लास को रोकते हैं, निजी कंट्रोलर के बारे में अधिक जानकारी देखें

एक निजी कन्स्ट्रक्टर के पीछे मूल विचार को जेवीएम के बाहर से एक कक्षा के तात्पर्य को प्रतिबंधित करना है, लेकिन यदि कोई क्लास का तर्क तर्क कंस्ट्रक्टर है, तो यह अनुमान लगाता है कि कोई जानबूझकर इन्स्तांत होता है

मेरे अनुसार हम एक निजी के रूप में कन्स्ट्रक्टर घोषित कर सकते हैं और हम कक्षा में स्थिर विधि का उपयोग करके उप वर्ग में उस क्लास का उदाहरण प्राप्त कर सकते हैं जिसमें हम कन्स्ट्रक्टर घोषित करते हैं और फिर क्लास ऑब्जेक्ट वापस लौटाते हैं। हम इस पद्धति को कक्षा से classname.method नाम bcz का उपयोग करके वर्ग को जोड़ते हैं, यह स्थिर विधि है और हम उस क्लास का उदाहरण प्राप्त करेंगे जिसमें हम const को घोषित करते हैं।