2011-10-02 11 views
7

में NoSuchElementException फेंकने इस दोगुना जावा में कार्यक्रम से जुड़ा हुआ एक कोड के लिए मेरा पहला प्रयास है मुझे पर हंसते लेकिन जो कुछ भी मुझे लगता है मैंकठिनाई जावा

नहीं खोजा जा सका प्रतीक हो रही है कोशिश: प्रतीक वर्ग: NoSuchElementException

मैं बनाने एक वर्ग NoSuchElementException.java जो अपवाद

फैली तो मैं

असूचित अपवाद NoSuchElementException पाने की कोशिश की, पकड़ा जाना चाहिए या को फेंकने की घोषणा की गई नई NoSuchElementException();

मैं करने के लिए कोड को बदलने की कोशिश की:

public Object next() throws NoSuchElementException { 

तो मैं मिल

अगले() ElementsIterator में अगले() java.util.Iterator में लागू नहीं कर सकते; ओवरराइड विधि फेंक नहीं है NoSuchElementException

क्या कोई इस बात को इंगित कर सकता है कि मुझे गलत कहां मिला। यदि इस समस्या को हल करने के लिए पर्याप्त जानकारी नहीं है, तो कृपया मुझे बताएं।

+0

के बाद से [ 'NoSuchElementException'] (http://download.oracle.com/javase/1.4.2/docs/api/java/util/NoSuchElementException.html) पहले से मौजूद है, तो आप की जरूरत नहीं होनी चाहिए इसकी परिभाषा रखने के लिए एक नई फाइल बनाएं। मैं _think_ अगर आप java.util आयात करते हैं। *; '(और अपनी नई फाइल को हटा दें), तो आप पहले से ही भाषा द्वारा उपलब्ध' NoSuchElementException' का उपयोग कर सकते हैं। लेकिन पिछले कुछ सालों से मैंने जावा किया है, इसलिए उम्मीद है कि जल्द ही एक बेहतर जवाब आएगा। – sarnold

+0

आपको बहुत बहुत धन्यवाद। जैसा कि आपने सुझाव दिया है कि मैंने आयात java.util। * जोड़ा और NoSuchElementException.class को हटा दिया और यह काम किया। – sreeprasad

उत्तर

15

आपको अपना खुद का निर्माण करने के बजाय java.util.NoSuchElementException आयात करने की आवश्यकता है।

1

java.util.Iterator और java.util.NoSuchElementException के लिए javadocs देखें। यदि आप इटरेटर इंटरफेस को लागू करते हैं, तो आपको इसके नियमों से खेलना होगा। उस अपवाद को आयात करें; इसे मत बनाओ

2

इटरेटर की अगली() विधि फेंकने का अपवाद घोषित नहीं करती है, इसलिए यदि आप इसे कार्यान्वित कर रहे हैं तो आप अपवाद को रद्द नहीं कर सकते हैं।

हालांकि आप अनचेक अपवाद फेंक सकते हैं। सरल फिक्स अपने कस्टम अपवाद को extends RuntimeException के रूप में परिभाषित करना है, जो इसे एक अनचेक अपवाद बना देगा।

मैं थोड़ा उलझन में हूं, क्योंकि NoSuchElementException पहले से ही एक अनचेक अपवाद है, जब तक कि आपने अपना स्वयं का NoSuchElementException क्लास परिभाषित नहीं किया हो।

+0

हे धन्यवाद, मुझे यह java.util आयात करके काम कर रहा है। * और हाँ आपका समाधान भी काम करता है! – sreeprasad

6

कंपाइलर आपको एक बहुत अच्छी व्याख्या दे रहा है।आप next() विधि Iterator में घोषणा की, जिनमें से एक हस्ताक्षर है के एक कार्यान्वयन प्रदान कर रहे हैं:

public Object next() 

हालांकि, अगर आप NoSuchElementException बुलाया अपने स्वयं जाँच अपवाद है, जो आवश्यक शुरू की है कि आप करने के लिए विधि हस्ताक्षर बदलने के लिए:

public Object next() throws NoSuchElementException 

अब आप इंटरफ़ेस में घोषित विधि को लागू नहीं कर रहे हैं। आपने हस्ताक्षर बदल दिया है।

फिर भी, वहाँ कुछ तरीके आप इसे ठीक कर सकते हैं:

  1. इतना है कि यह RuntimeException के बजाय सिर्फ Exception से विरासत

    अपने NoSuchElementException वर्ग बदलें। फिर आपको विधि हस्ताक्षर के लिए throws घोषणा जोड़ने की आवश्यकता नहीं है।

  2. अपने कस्टम अपवाद प्रकार से छुटकारा पाएं और इसके बजाय जावा के अंतर्निर्मित NoSuchElementException का उपयोग करें, जो पहले ही RuntimeException से विरासत में है। यह लगभग निश्चित रूप से बेहतर विकल्प है।

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