इनर वर्गों (स्थिर या नहीं) उनके संलग्नित क्लास 'के खेतों और गुमनाम वर्ग के रूप में तरीकों को बिल्कुल वैसा ही उपयोग किया है, स्थिर आंतरिक कक्षाओं के बीच अंतर (अधिनियम जिसे नेस्टेड क्लास कहा जाता है) और (नियमित, गैर स्थैतिक) आंतरिक वर्ग यह है कि स्थैतिक को किसी को एक्सेस करने के लिए संलग्न कक्षा के उदाहरण के स्पष्ट संदर्भ की आवश्यकता होती है। बेशक, जब आपको ऐसा करने की ज़रूरत होती है, तो यह आमतौर पर संलग्न वर्ग के उदाहरण पर होता है जिसने आंतरिक वर्ग बनाया है, इसलिए गैर-स्थैतिक आंतरिक वर्ग का उपयोग करना आसान और स्पष्ट है।
उदाहरण:
इनर वर्ग (गैर स्थिर)
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
}
}
}
}
चाहे आप उस पहुंच का उपयोग करते हैं, एक और सवाल है। यदि आप संलग्न कक्षा के निजी क्षेत्रों तक पहुंचते हैं, तो एक एक्सेसर उत्पन्न होगा, इसलिए प्रदर्शन को प्रभावित कर सकता है क्योंकि किसी विधि को कॉल करने की लागत एक फ़ील्ड तक पहुंचने जैसी नहीं है, लेकिन यह शायद नगण्य होगी अधिकांश मामले। किसी भी माप के आधार पर सूक्ष्म अनुकूलन करने से पहले आपको हमेशा सही कोड (डिजाइन और कार्यक्षमता दोनों के मामले में) लिखना चाहिए। जेआईटी कंपाइलर वैसे भी आपके लिए बहुत सी चीजें करता है।
स्रोत
2012-09-24 08:12:02
उस संदर्भ में प्रदर्शन के बारे में सोचा नहीं है। लेकिन डिजाइन: डिजाइन समारोह का पालन करता है। मुझे लगता है कि ऐसे परिदृश्य हैं जब स्थिर शिष्टाचार "सर्वोत्तम अभ्यास" और अन्य जहां अनामिक हैं। – Fildor
प्रदर्शन शायद नगण्य होगा ... लेकिन मैं इसके बारे में थोड़ी उत्सुक हूं। – David