2010-01-22 10 views
7

को पकड़ने का सबसे अच्छा तरीका क्या है इस प्रकार के अपवाद का सबसे अच्छा उपयोग कब होगा और अगर ऐसा कैच में पकड़ा जाता है तो इसे ठीक से संभाला जाता है?IllegalArgumentException

catch(Exception e) 

या क्या इसे स्पष्ट रूप से पकड़ा जाना चाहिए?

catch(IllegalArgumentException e) 

उत्तर

12

यह पहले पकड़ा जाएगा - लेकिन अन्य अपवादों का एक समूह होगा। आपको वास्तव में अधिक से अधिक नहीं पकड़ना चाहिए।

यदि आप वास्तव में है उसे पकड़ने के लिए दूसरा बेहतर है ... लेकिन आमतौर पर इस बुला कोड में एक बग इंगित करता है। कभी-कभी यह को तर्कों आदि को मान्य करने के लिए उच्चतम विधि का एक मामला नहीं है। आदर्श दुनिया में, किसी भी समय IllegalArgumentException फेंक दिया जाता है, कॉलर को इसे पास करने से पहले मूल्य को सत्यापित करने का एक तरीका होना चाहिए, या एक कॉल करना चाहिए संस्करण जो एक असाधारण तरीके से विफल हो जाएगा (उदाहरण के लिए .NET में TryParse पैटर्न, जो out पैरामीटर के बिना जावा में स्वीकार्य रूप से कठिन है)। यह हमेशा मामला नहीं है, लेकिन जब भी आपको IllegalArgumentException मिलता है तो यह देखने के लायक है कि आप विधि को कॉल करने से पहले मानों की जांच करके इसे से बच सकते हैं।

0

यह वास्तव में हाथ में मामले पर निर्भर करता है, या तो अपने आप में सही है। प्रश्न के दायरे को कम किए बिना, "सर्वश्रेष्ठ उपयोग" उदाहरण देने में थोड़ा मुश्किल है।

3

आपको catch (Exception) से दूर रहना चाहिए क्योंकि आप प्रत्येक संभावित अपवाद को पकड़ लेंगे। यदि आप वास्तव में केवल IllegalArgumentException की अपेक्षा करते हैं और उस मामले को संभालें तो आपको उस दायरे को विस्तृत नहीं करना चाहिए; फिर अन्य प्रकार के अपवादों के लिए अधिक पकड़ ब्लॉक जोड़ें।

7

आपको एक अवैध आर्ग्यूमेंट अपवाद नहीं संभालना चाहिए। यह अनुमान है कि डेवलपर को सूचित करना है कि उसने गलत तर्क के साथ एक विधि बुलाई है। समाधान, अन्य तर्कों के साथ विधि को कॉल करने के लिए है।

आप इसे पकड़ चाहिए यदि आप

catch(IllegalArgumentException e) 
+0

पुस्तकालय जो फेंकता है यह एक उच्च स्तर पर अपवाद का पुनर्परीक्षण होने से पहले ही फोन करने वाले को ऊपर की ओर बाहर निकल जाता है की जरूरत है जब तक उपयोग करना चाहिए। – tar

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