2012-01-28 23 views
16

में बाहरी वर्ग विधि को कॉल करना हाल ही में, मैंने एंड्रॉइड प्रोजेक्ट में एक रहस्यमय समस्या में भाग लिया, जिसे मैंने here वर्णित किया था। मैंने किसी भी तरह से समस्या हल की, लेकिन अभी भी इसके पीछे सही कारण नहीं पता है।जावा: अज्ञात आंतरिक वर्ग

मान लें कि मैं आंतरिक वर्ग में फ़ंक्शन foo() को कॉल करना चाहता हूं। सवाल है, क्या सीधे

foo(); 

है जैसे कि यह बुला के बीच अंतर या बाहरी वर्ग उदाहरण

OuterClass.this.foo(); 

इसके अलावा के साथ बुला, मैं अगर कोई जांच कर सकते हैं की सराहना करेंगे है मेरा आखिरी question इस से संबंधित, और मुझे एक संकेत दें कि त्रुटि क्यों होती है। बहुत धन्यवाद।

पीएस: मैंने कहीं पढ़ा है कि गैर स्थैतिक आंतरिक वर्ग हमेशा बाहरी वर्ग का उदाहरण रखेगा। तो अगर मैं केवल foo() का उपयोग करता हूं तो यह उस उदाहरण का उपयोग करके बाहरी फ़ंक्शन को कॉल करेगा?

उत्तर

20

उत्तरार्द्ध अधिक स्पष्ट है और यदि आप एक ही नाम के साथ आंतरिक कक्षा में मौजूद हैं तो बाहरी वर्ग विधि को कॉल करने की अनुमति देगा।

class OuterClass { 
    void foo() { System.out.println("Outer foo"); } 

    View.OnClickListener mListener1 = new View.OnClickListener() { 
     void foo() { System.out.println("Inner foo"); } 

     @Override public void onClick(View view) { 
      foo(); //Calls inner foo 
      OuterClass.this.foo(); //Calls outer foo 
     } 
    } 

    View.OnClickListener mListener2 = new View.OnClickListener() { 
     @Override public void onClick(View view) { 
      foo(); //Calls outer foo 
      OuterClass.this.foo(); //Calls outer foo 
     } 
    } 
} 
+0

Thx। लेकिन मुझे यकीन है कि आंतरिक वर्ग में मेरे मामले में एक ही नाम के साथ कोई फ़ंक्शन नहीं है। क्या स्पष्ट भाग को छोड़कर कोई अन्य विशिष्ट अंतर है? – Selkie

+0

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

+0

आप सही हैं। मैंने वहां एक गलती की। प्रबुद्ध के लिए धन्यवाद! – Selkie

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