2012-06-26 7 views
21

मैं निम्नलिखित संदेह जो अपवाद फेंक के विषय में है, तो सूची खालीजावा में सूची खाली होने पर फेंकने के लिए कौन सा अपवाद है?

public class XYZ implements Runnable { 
    private List<File> contractFileList; 

    @Override 
    public void run() { 
     contractFileList = some method that will return the list; 
     //now i want to check if returned contractFile is empty or not , if yes then raise the exception 
     if (contractFileList.isEmpty()) { 
      // throw new ????? 
     } 
    } 
} 

मैं एक बैच के अंदर इस कोड runing रहा है, मैं कुछ अपवाद है कि बैच निष्पादन बंद हो जाएगा फेंक करना चाहते हैं।

उत्तर

30

यह मेरे लिए IllegalStateException जैसा दिखता है।

सिग्नल कि एक विधि अवैध या अनुचित समय पर लागू की गई है।

मूल रूप से आपकी वस्तु run के लिए वैध स्थिति में नहीं है।

मैं इसके लिए अपना अपवाद नहीं बनाऊंगा जबतक कि आप जानबूझकर कहीं और पकड़े जाने की अपेक्षा न करें। यह लगता है ऐसा ही एक अप्रत्याशित स्थिति की बजाय प्रोग्रामिंग त्रुटि के कारण होता है ... इस स्थिति में एक अनचेक अपवाद उचित है, और IllegalStateException समस्या की सामान्य प्रकृति का स्पष्ट रूप से वर्णन करता है।

आप अपवाद के संदेश के भीतर एक विस्तृत कारण डाल सकते हैं (समझाते हुए कि "अवैध स्थिति" यह थी कि सूची खाली थी)।

मेरा सुझाव है कि आप गलत हो सकते हैं कि हर छोटी चीज के लिए एक अलग अपवाद प्रकार बनाने से बचने का प्रयास करें - जब तक कि आप इन अपवादों को अलग से पकड़ नहीं लेते हैं, अलग-अलग प्रकार की मदद नहीं होती है; यह केवल अव्यवस्था में जोड़ता है। एक अपवाद जो सही व्यापक प्रकार का है लेकिन एक उपयोगी संदेश है, उतना ही अधिक संज्ञानात्मक उपरि के बिना उतना ही लाभ प्रदान करता है।

ध्यान दें कि आप एक जाँच अपवाद अगर आप Runnable.run वैसे भी लागू कर रहे हैं, के रूप में है कि किसी भी अपवाद जाँच फेंकने के लिए घोषित नहीं किया गया है का उपयोग नहीं कर सकते हैं। आपको इसे एक अनचेक अपवाद (जैसे RuntimeException) में लपेटना होगा, जिस बिंदु पर कम लाभ भी है।

+0

धन्यवाद जॉन ... !! हाँ आप सही हैं मैं Runnable.run() में चेक किए गए उत्साह का उपयोग नहीं कर सकता। तो मैं IllegalStateException – Beginner

+0

'का उपयोग कर रहा हूं, अगर (अनुबंध FileList.isEmpty()) { नया IllegalStateExcpetion ("contractFileList खाली है") फेंक दें; – Beginner

+0

आशा है कि यह सही है .. कृपया टिप्पणी – Beginner

6

Exception उप-वर्गीकरण करके अपना अपवाद बनाएं और एक वर्णनात्मक नाम बनाएं।

public class MyEmptyListException extends Exception { 
    public MyEmptyListException(String message) { 
     super(message); 
    } 
} 
+2

मेरा जवाब देखें कि मैं ऐसा क्यों नहीं करूंगा। –

0

आपको User defined Exception फेंकना चाहिए।

आपको अपना अपवाद वर्ग बनाना चाहिए और फिर इसे फेंक देना चाहिए।

+0

* क्यों * आपको लगता है कि ओपी को ब्याज से, इसके लिए एक नया अपवाद बनाना चाहिए? (मेरा जवाब बताता है कि मुझे क्यों नहीं लगता कि उन्हें चाहिए।) –

2

यदि मैं कोई कस्टम अपवाद कक्षा बना रहा हूं तो मैं इन बिंदुओं को अपने दिमाग में रखूंगा।

  • सुनिश्चित करें कि आपके पास पूरे एप्लिकेशन में अपवादों को संभालने का एक सतत तरीका है।
  • क्या नया कस्टम अपवाद अपवाद से पुनर्प्राप्त करने के तरीके के रूप में आपकी विधि का उपयोग कर डेवलपर को अधिक जानकारी देगा?

कृपया कुछ लिंक ढूंढें जिन्हें मुझे अपवाद हैंडलिंग को समझने के लिए उपयोगी पाया गया ..

  1. Best Practices for Exception Handling
  2. Does Java need checked Exceptions
  3. Unchecked Exceptions
0

मैं एक IllegalArgumentException फेंक दिया होगा। चूंकि Javadoc बताता है कि यह "यह इंगित करने के लिए फेंक दिया गया है कि एक विधि को अवैध या अनुचित तर्क दिया गया है"।

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