प्रश्न (1) के बारे में: जॉन का उत्तर सही है, क्योंकि वह कक्षा को 'नेस्टेड' निजी रूप से चिह्नित करता है, इसे सार्वजनिक या आंतरिक :-) नहीं बनाकर। आप इसे 'निजी' जोड़कर स्पष्ट रूप से कर सकते हैं:
private class Nested
प्रश्न के बारे में (2): मूल रूप से पहले प्रिन्टफील्ड और टाइप इनिशियलाइज़ेशन के बारे में पोस्ट आपको बताती है कि यदि आपके पास कोई स्थैतिक निर्माता नहीं है, तो रनटाइम इसे किसी भी समय (लेकिन इससे पहले कि आप इसका उपयोग करें) कर सकते हैं। यदि आपके पास स्थैतिक निर्माता है, तो स्थैतिक निर्माता में आपका कोड फ़ील्ड को इनिशियलाइज़ कर सकता है, जिसका अर्थ है कि रनटाइम केवल फ़ील्ड को आरम्भ करने की अनुमति देता है जब आप टाइप करते हैं।
इसलिए यदि आप नहीं चाहते कि रनटाइम खेतों को 'सक्रिय' करने से पहले उनका उपयोग करें, तो एक स्थिर कंस्ट्रक्टर जोड़ें।
किसी भी तरह से, यदि आप एकल को लागू कर रहे हैं, तो आप या तो इसे आलसी के रूप में शुरू करना चाहते हैं और न कि जब रनटाइम को लगता है कि यह आपके चर को शुरू करना चाहिए - या आप शायद परवाह नहीं करते हैं। आपके प्रश्न से मुझे लगता है कि आप उन्हें जितनी जल्दी हो सके उतनी देर से चाहते हैं।
यह जॉन के पोस्ट को सिंगलटन के बारे में बताता है , जो इस प्रश्न का अंतर्निहित विषय है। ओह और संदेह :-)
मैं यह बताना चाहता हूं कि उनका सिंगलटन # 3, जिसे उन्होंने 'गलत' के रूप में चिह्नित किया है, वास्तव में सही है (क्योंकि लॉक का स्वचालित रूप से बाहर निकलने पर मेमोरी बैरियर का तात्पर्य है )। यह सिंग्लटन # 2 से भी तेज होना चाहिए जब आप एक से अधिक बार उदाहरण का उपयोग करते हैं (जो कि सिंगलटन :-) का बिंदु कम या ज्यादा होता है)। इसलिए, यदि आपको वास्तव में एक आलसी सिंगलटन कार्यान्वयन की आवश्यकता है, तो मैं शायद उस एक के लिए जाऊंगा - साधारण कारणों से (1) यह सभी के लिए बहुत स्पष्ट है कि आपका कोड क्या हो रहा है और (2) आपको पता है कि क्या होगा अपवादों के साथ।
मामले में आप सोच रहे हैं: मैं कभी भी सिंगलटन # 6 का उपयोग नहीं करूंगा क्योंकि यह आसानी से अपवादों के साथ गतिरोध और अप्रत्याशित व्यवहार का कारण बन सकता है। विवरण के लिए, देखें: आलसी का लॉकिंग मोड , विशेष रूप से एक्ज़ीक्यूशनएंड रिपब्लिकेशन।