2010-02-03 13 views
18

जब किसी कन्स्ट्रक्टर में विधियों को अपवादित किया जाता है, तो कन्स्ट्रक्टर को संभाल नहीं सकता है, तो उन्हें पकड़ना ठीक है और रनटाइम अपवाद के रूप में उन्हें वापस फेंकना ठीक है यदि आपका यकीन है कि एप्लिकेशन इसे संभाल नहीं सकता है और बिना बेकार होगा वस्तु का निर्माण किया जा रहा है?क्या रचनाकारों के लिए रनटाइम अपवाद फेंकना ठीक है?

+6

हां, कन्स्ट्रक्टर से अपवाद फेंकना एक वस्तु के निर्माण को रद्द करने का मानक तरीका है। –

+0

+1 - नए कॉमर्स के लिए ओओपी – JonH

उत्तर

11

हां, यह कई रचनाकारों में वैसे भी अपरिहार्य है जब वे अन्य विधियों को कॉल करते हैं क्योंकि हमेशा संभावना है कि वे पहले से ही अनचेक अपवाद फेंक देंगे।

+0

के लिए अच्छा सवाल यह एक अच्छा मुद्दा है। – insipid

4

हां यह आपके कन्स्ट्रक्टर में अपवाद फेंकने के लिए पूरी तरह से मान्य है। ऐसा करने के लिए आपके पास बहुत कम या कोई अन्य विकल्प नहीं है, खासकर जब आप किसी ऑब्जेक्ट को बनाने की कोशिश कर रहे हैं और चीजें सिर्फ सही पर काम न करें।

+0

स्पष्टीकरण के लिए, क्या आप एक अनचेक अपवाद में कनवर्ट करने के लिए ठीक कह रहे हैं। या क्या आप सिर्फ फेंकने वाला खंड जोड़ना चाहते हैं? – insipid

+4

मैं अक्सर वर्णित एक स्ट्रिंग के साथ 'IllegalArgumentException' फेंक दूंगा। – philfreo

1

हां। जब तक आप यह नहीं जानते कि अपवाद को कैसे संभाला जाना चाहिए, तो आप इसे निगलने और एक स्टैक ट्रेस (या बदतर, पूरी तरह से कुछ भी नहीं) प्रिंट करने के बजाय इसे फेंकने से बेहतर हैं।

इससे बाद में कुछ बेहद मुश्किल-से-डीबग त्रुटियों को रोकने में मदद मिलेगी।

11

हां। यह मानक अभ्यास है।

Effective Java, 2nd Ed. में यह आइटम 61 द्वारा कवर किया गया है, "अमूर्तता के लिए उपयुक्त अपवाद फेंको"। चाहे परिणामी अपवाद चेक किया गया हो या अनचेक किया गया हो, आइटम 58 में प्रभावी जावा द्वारा भी कवर किया गया है, "प्रोग्रामिंग त्रुटियों के लिए पुनर्प्राप्ति योग्य स्थितियों और रनटाइम अपवादों के लिए चेक अपवादों का उपयोग करें"।

कि यह एक सामान्य विधि के बजाय एक निर्माता है वास्तव में एक मुद्दा नहीं है। (वास्तव में, रचनाकारों के पास तर्कसंगत रूप से अधिक स्वतंत्रता है क्योंकि वे सुपर के इंटरफ़ेस से बंधे नहीं हैं।)

किसी अन्य अपवाद के परिणामस्वरूप अपवाद फेंकते समय यह सुनिश्चित करना एक अच्छा विचार है कि आप नए पर cause सेट कर रहे हैं अपवाद।

+1

अच्छे स्रोत के लिए +1 – insipid

+1

संदर्भ के सभी उत्तर प्रभावी जावा +1 का पात्र है :) – Fredrik

2

को चेक अप करने के लिए बिल्कुल ठीक है, यह इंगित करने के लिए कि ऑब्जेक्ट का निर्माण विफल रहा है, क्योंकि क्रिस जेस्टर-यंग ने पहले ही टिप्पणी की थी। चाहे अनचेक अपवाद फेंकना एक अच्छा विचार है, अपवाद एक और मुद्दा है। आप संकलक के घबराहट को खो देंगे जो आपको अपवाद को पकड़ने और संभालने का आग्रह करता है, जिसे आप निश्चित रूप से करना चाहते हैं।

+0

आप क्यों चाहते हैं? अधिकतर बार आप इसे संभालना नहीं चाहते हैं, इसकी एक त्रुटि है, इसे लॉगर/जॉब हैंडलर पर स्टैक को चलाने दें। – reto

1

व्यक्तिगत रूप से मुझे रचनाकारों को चेक अपवादों को फेंकने से नफरत है (जैसा कि डोप्पेल्डिश पहले से ही इंगित किया गया है)। फिर भी, आप कैसे सुनिश्चित कर सकते हैं कि एप्लिकेशन अपवाद को संभाल नहीं सकता है? यहां तक ​​कि यदि एप्लिकेशन इसे संभाल नहीं सकता है, तो शायद उपयोगकर्ता फिर कोशिश कर सकता है?

+0

कुछ विचार करने के लिए +1: पी धन्यवाद – insipid

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