2011-10-01 6 views
31

मैं नेटबीन्स में एक छोटा डेस्कटॉप एप्लिकेशन विकसित कर रहा हूं। यह मेरा पहला कार्यक्रम है और मुझे एक बहुत ही अजीब प्रकार की त्रुटि का सामना करना पड़ रहा है। मैं जानता हूँ कि मैं कुछ बात गलत है लेकिन असमर्थ मैं गलत क्या कर रहा हूँ :(मैं "एक संलग्न उदाहरण जिसमें X.Y आवश्यक है" को हल कैसे कर सकता हूं?

कृपया मुझे इस त्रुटि को दूर करने में मदद कर पता लगाने के लिए किया था

विवरण:। मैं एक डिफ़ॉल्ट पैकेज है Src और मैं नए जावा वर्गों बनाने हूँ । इस पैकेज के रूप में आवश्यक में अन्य वर्गों के साथ-साथ मैं इस तरह एक वर्ग X बनाया:

public class X 
{ 
    public class Y 
    {//some member functions and variables exist here} 

    public class Z 
    {//some member functions and variables exist here} 

    //some member functions and variables exist here 
} 

अब मैं कुछ अन्य वर्ग है कि एक ही पैकेज में मौजूद है में भीतरी वर्गों में से एक के कहने बनाने की जरूरत है, इस तरह :

public X.Y oY = new X.Y(); 

लेकिन मैं निम्नलिखित त्रुटि हो रही है:

an enclosing instance that contains X.Y is required

कृपया मुझे इस त्रुटि को हल करने में मदद करते हैं।

+0

संभव डुप्लिकेट [एक enclosing उदाहरण जिसमें <मेरे संदर्भ> की आवश्यकता है] (http://stackoverflow.com/questions/4297857/an-enclosing-instance-that-contains-my-reference-is-required) –

उत्तर

68

सबसे पहले आपको एक्स क्लास (बाहरी वर्ग) का ऑब्जेक्ट बनाना है और फिर वाई क्लास की ऑब्जेक्ट बनाने के लिए objX.new InnerClass() वाक्यविन्यास का उपयोग करना है।

प्रयास करें,

X x=new X(); 
X.Y y=x.new Y(); 
+6

वाह! मैंने आज कुछ झुकाया! अजीब वाक्यविन्यास। बहुत अच्छा! +1 –

+1

क्या किसी को पता है कि उन्होंने इस तरह से भाषा क्यों बनाई? यह किस उद्देश्य से सेवा करता है? – wonton

+0

यहां देर से प्रतिक्रिया के लिए खेद है, मेरा मानना ​​है कि यह स्थिर घोंसले वाले वर्गों और गैर स्थैतिक घोंसले वर्गों दोनों का समर्थन करने में सक्षम होना है। मैं एक विशेषज्ञ नहीं हूं, लेकिन जो मैं पढ़ रहा हूं, उससे मेरा मानना ​​है कि यह अधीनस्थ वर्गों को माता-पिता (गैर स्थैतिक) के उदाहरण के सदस्य होने के लिए मजबूर करना है और अधीनस्थ वर्गों के लिए एक अलग वाक्यविन्यास बनाना है जिनकी आवश्यकता नहीं है एक माता पिता (स्थिर)। https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html – joelc

31

आप स्थैतिक आंतरिक कक्षाएं घोषित करना चाहते हैं: public static class Y

+0

किस कारण से? – Mahesh

+2

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

+2

+1 - स्वीकृत उत्तर पूरी तरह से पूर्ण नहीं है क्योंकि यह मानता है कि वर्ग को गैर-स्थैतिक संदर्भ से आवश्यक है। मेरे मामले में, यह सच नहीं था। – jazzbassrob

7

Y के द्वारा स्थिर घोषित एक्स के कहने बनाने से बचने के लिए

public class X 
{ 
    public static class Y { 
    } 
} 
की