2012-09-24 17 views
6

अनाम कक्षाओं और स्थैतिक आंतरिक कक्षाओं के लिए सबसे अच्छा अभ्यास (डिज़ाइन और प्रदर्शन के अनुसार) क्या है?आंतरिक/अज्ञात वर्गों के लिए सर्वोत्तम अभ्यास

व्यक्तिगत रूप से मैं यह सोचना चाहता हूं कि स्थिर आंतरिक कक्षाएं बेहतर encapsulation प्रदान करती हैं और बेहतर प्रदर्शन देना चाहिए क्योंकि उनके पास कक्षा के बाहर अंतिम चर तक पहुंच नहीं है। लेकिन मैंने कभी इस पर सवाल नहीं उठाया है।

मुझे इसके बारे में एक पोस्ट मिली लेकिन मुझे लगा कि यह वास्तव में इस बारे में सवाल का जवाब नहीं दे रहा था, सिर्फ लोगों के बारे में व्यक्तिगत विचार।

+0

उस संदर्भ में प्रदर्शन के बारे में सोचा नहीं है। लेकिन डिजाइन: डिजाइन समारोह का पालन करता है। मुझे लगता है कि ऐसे परिदृश्य हैं जब स्थिर शिष्टाचार "सर्वोत्तम अभ्यास" और अन्य जहां अनामिक हैं। – Fildor

+0

प्रदर्शन शायद नगण्य होगा ... लेकिन मैं इसके बारे में थोड़ी उत्सुक हूं। – David

उत्तर

4

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

उदाहरण:

  • इनर वर्ग (गैर स्थिर)

    class A { 
        private int field; 
    
        private class B { 
         public void doSomething() { 
          field++; // Valid 
         } 
        } 
    } 
    
  • नेस्टेड वर्ग (यानी "स्थिर भीतरी वर्ग")

    class A { 
        private int field; 
    
        private static class B { 
         public void doSomething(A a) { 
          a.field++; // Valid 
         } 
        } 
    } 
    
  • बेनामी वर्ग

    class A { 
        private int field; 
    
        public void doSomething() { 
         new Runnable() { 
          @Override 
          public void run() { 
           field++; // Valid 
          } 
         } 
        } 
    } 
    

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

+1

+1: ... सही कोड पहले लिखें ... – Jayan

+0

कोई स्थिर नहीं है आंतरिक वर्ग के रूप में उनके पास अभिभावक वर्ग के सदस्यों तक पहुंच नहीं है (यानी गैर स्थैतिक सदस्य स्थिर संदर्भ से पहुंच योग्य नहीं होंगे)।हम उनको स्थैतिक घोंसला वाले वर्ग कहते हैं, शीर्ष स्तर या स्वतंत्र वर्ग की तरह काम करते हैं। –

+0

@LeninkumarKoppoju वास्तव में, उन्हें नेस्टेड कक्षाएं कहा जाता है, मैंने बाद में सही नाम सीखा। मैं जवाब अपडेट करूंगा। हालांकि, एक नेस्टेड क्लास में संलग्न वर्ग के किसी भी सदस्य तक पहुंच है _if में उस वर्ग_: 'outer.privateInt = 42;' कार्यों के उदाहरण का संदर्भ है, जो कि किसी अन्य शीर्ष-स्तरीय वर्ग से असंभव है। –

1

जावा स्रोत कोड संग्रह और पैटर्न नमूना है करने के लिए (वे JDK निर्देशिका में src.zip में हैं में देखें। ग्रहण में, आप एक किताब Effective Java पढ़ें इनलाइन मदद

साथ कोड पढ़ सकते हैं, देखो भीतरी वर्ग के लिए को समझने के लिए static, inner और अन्य उपयोगी interface, enum और अन्य वर्गों के काम करता है

+0

@ सीएल-आर: यह मूल लिंक उल्लंघन की प्रतिलिपि की तरह दिखता था। मैंने इसे अमेज़ॅन लिंक – Jayan

+0

@ जयान के साथ बदल दिया, धन्यवाद, मुझे यह समस्या नहीं पता था। –

+0

बहुत समय पहले मैंने इस पुस्तक को देखा ... सोचो कि मैं इसे फिर से देखूंगा :) – David

संबंधित मुद्दे