2011-08-16 9 views
5

में त्रुटि बनाएं मैं ग्रहण और जावा दोनों में नया हूं।ग्रहण

मुझे आश्चर्य है कि निम्नलिखित Eclipses संकलक या मेरी स्थापना में कोई त्रुटि है या नहीं।

मैंने एक सार्वजनिक वर्ग के भीतर एक सार्वजनिक वर्ग को एक सेवा विधि के लिए रिटर्न प्रकार परिभाषित करने के लिए परिभाषित किया है।

public class ServiceThing { 
    public class ReturnType {...} 
    public ReturnType serviceMethod (...) {...} 
    ... 
} 

वर्ग जहाँ मैं सेवा विधि मैं एक ReturnType instatiate एक डिफ़ॉल्ट संदेश धारण करने के लिए फोन में:

ReturnType returnType = new ReturnType(...); 

इस निर्माण करने के लिए एक कोशिश जब मैं मिल निम्नलिखित त्रुटियाँ:

बिल्डिंग कार्यक्षेत्र: निर्माण के दौरान त्रुटियां हुईं। प्रोजेक्ट 'XXXX.android' पर बिल्डर 'जावा बिल्डर' चलाने वाली त्रुटियां। java.lang.ArrayIndexOutOfBoundsException

सहेजें विफल: सहेजें विफल; java.lang.NullPointerException

मुझे पता चला कि आवश्यक वाक्य रचना है:

ServiceThing serviceThing = ...; 
ReturnType returnType = serviceThing.new ReturnType(...); 

लेकिन संकलक वैसे भी एक NullPointerException उत्पन्न नहीं करना चाहिए।

+0

क्या मैं पूछ सकता हूं कि आपको सार्वजनिक कक्षा के अंदर सार्वजनिक कक्षा की आवश्यकता क्यों है? यदि यह सार्वजनिक है, तो इसे पूरी तरह से अकेले वर्ग क्यों न बनाएं। – Gapton

+1

यह कक्षा के इरादे का एक मजबूत संकेत देने के लिए है। सेवा कॉल के रिटर्न प्रकार के लिए इसका उपयोग पूरी तरह से किया जाता है। अगर मैं इसे स्पैरेट फ़ाइल में डालता हूं तो मुझे लगता है कि यह गन्दा लगेगा क्योंकि उसके पास – bitestar

उत्तर

4

ReturnType एक public static class आप माता-पिता उदाहरण के संदर्भ से छुटकारा मिल जाएगा और अपने

ReturnType returnType = new ReturnType(...); 

बनाने के रूप में आप इसे करने की उम्मीद काम करेंगे करके।

static उपclasses के संशोधक उदाहरणों के बिना उनके मूल वस्तुओं के लिए एक अंतर्निहित संदर्भ होता है। इस कारण में ReturnType का उदाहरण बनाने के लिए आपको ServiceThing इंस्टेंस की आवश्यकता है।

+0

अच्छा जवाब नहीं है। इस समाधान को वास्तव में आइटम 22 में [प्रभावी जावा, द्वितीय संस्करण] (http://java.sun.com/docs/books/effective/) में अनुमोदित किया गया है: nonstatic पर स्थैतिक सदस्य वर्गों का पक्ष लें। मुझे अभी भी लगता है कि कंपाइलर ने यह त्रुटि संदेश लिखा होगा: बिना किसी उदाहरण के एक गैरस्टिक सदस्य वर्ग का उदाहरण बनाना असंभव है। – bitestar