2013-02-15 59 views
12

मैं अपने आवेदन के लिए एक कस्टम अपवाद वर्ग डिजाइन कर रहा हूं। मेरे पास एक बहुत ही बुनियादी सवाल है। क्या मुझे अपवाद वर्ग या थॉवेबल क्लास से विस्तार करना चाहिए? क्या लाभ हैं ?कस्टम अपवाद वर्ग - अपवाद या थॉवेबल से विस्तारित है?

मैं इसे अंतर्निहित परतों से फेंकना चाहता हूं और इसे शीर्ष स्तर की कक्षाओं में पकड़ना चाहता हूं। यह थॉवेबल ओवर अपवाद का उपयोग करने के अपने फैसले को प्रभावित करेगा। क्या यह मौलिक रूप से एक थैलेबल पकड़ने का अधिकार है?

मैं इस मंच में कुछ अन्य धागे से गुजर चुका हूं। वे स्टैक ट्रेस को बनाए रखने के बारे में बात करते हैं और इसे अपवाद के लिए नहीं रखते हैं। मैं समझता हूं कि कुछ कहते हैं (here) कि थॉवेबल अपवाद का सुपर क्लास है और हमें इसका उपयोग नहीं करना चाहिए। लेकिन अन्य (here) कहते हैं अपवाद "असाधारण" मामलों के लिए है।

यह प्रश्न इस बात की चर्चा है कि कैसे एक पूछने के बजाय किसी अन्य से बेहतर है।

+2

अंत में, जो आप शीर्ष स्तर पर पकड़ने जा रहे हैं वह 'आपका अपवाद' है - चाहे वह एक अपवाद है या थ्रोबल कोई फर्क नहीं पड़ता है। यदि अन्य लोग आपके एपीआई का उपयोग कर सकते हैं और उस अपवाद को पकड़ना चाहते हैं, तो अपवाद को विस्तारित करने से शायद कम आश्चर्य होगा। – assylias

+0

उत्तर के लिए धन्यवाद। हाँ, मैं इसके साथ सहमत हूं। मैं बस यह सुनिश्चित कर रहा था कि मेरा निर्णय सही है। मैं नहीं चाहता कि मुझ पर कोई पिक पिकिंग हो। :) – Jay

उत्तर

20

Throwable सभी बुरी परिस्थितियों के लिए एक वर्ग है, जो उत्पन्न हो सकता है: त्रुटियां & अपवाद।

Error, कुछ है आप बिल्कुल को संभाल नहीं कर सकते हैं: OutOfMemoryError, VirtualMachineError, आदि

Exceptionअसाधारण मामलों के लिए है।

अपवाद 2 रूपों में आता है:

  1. RuntimeException रों। NullPointerException, ClassCastException, आदि

  2. Checked अपवाद:

    इन लोगों को, आप की जानकारी नहीं है। , आदि IOException रों

आप अपने कोड के उपयोगकर्ताओं चाहते हैं, स्पष्ट रूप को संभालने के लिए:

ये अपवाद हैं, जो आपके कोड के बारे में पता है और स्पष्ट रूप catched किया जाना चाहिए (... throws MyException) कुछ असाधारण परिस्थितियों में, Exception का विस्तार करना अच्छा होगा, RuntimeException नहीं। Throwable का विस्तार करने की कोई आवश्यकता नहीं है।

4

मूल रूप से आपको Exception कक्षा को विस्तारित करना चाहिए क्योंकि आप Custom Exception बना रहे हैं। Exception और Error दोनों Throwable फैलाते हैं, यह वास्तव में Throwable का विस्तार करने में समझ में नहीं आता है।

4

ThrowableError & Exception का सुपर क्लास है।

Exception, Error की तरह, & को फेंक दिया जा सकता है।

लेकिन यह निम्नलिखित दस्तावेज़ के अनुसार उचित नहीं है,:

आप त्रुटि वस्तुओं या त्रुटि उपप्रकार को पकड़ने के लिए आवश्यक नहीं हैं। आप भी एक त्रुटि स्वयं फेंक सकते हैं (हालांकि AssertionError के अलावा आप शायद कभी नहीं चाहते हैं), और आप एक को पकड़ सकते हैं, लेकिन फिर से, आप शायद नहीं करेंगे। उदाहरण के लिए, क्या आप वास्तव में ऐसा करेंगे यदि आपको OutOfMemoryError मिला है?

इसे ध्यान में रखते हुए अवधारणा, मैं Throwable विस्तार करने के लिए सुझाव है कि अगर आप फेंक और/या Exception & Error दोनों को पकड़ने के लिए चाहते हैं। Exception बढ़ाएं यदि आप केवल Exception को फेंकना और/या पकड़ना चाहते हैं।