2010-04-21 20 views
25

जावा में अपना खुद का अपवाद पदानुक्रम कैसे परिभाषित करते हैं?जावा में अपना खुद का अपवाद पदानुक्रम कैसे परिभाषित करते हैं?

मेरा मुख्य प्रश्न पैकेज स्थान से संबंधित है जहां आपकी अपवाद कक्षाओं को परिभाषित किया जाना चाहिए।

क्या हम अपने अपवादों के लिए एक विशेष पैकेज बनाते हैं और इसके अंदर सभी कक्षाएं डालते हैं?

उत्तर

26

मैं इसे सामान्य नियम के रूप में उपयोग करता हूं।

  • जहां यह समझ में आता है, पूर्व परिभाषित जावा अपवाद का उपयोग करें। उदाहरण के लिए, यदि आपके कोड में कुछ प्रकार की I/O त्रुटि है, तो IOException को फेंकना ठीक है।
  • यदि आप कोशिश/पकड़ ब्लॉक में दो अपवादों के बीच अंतर करने की आवश्यकता है तो केवल अपवाद पदानुक्रमों का उपयोग करें। कई बार यह एकदम सही है कि एक ही घटक अलग-अलग त्रुटियों के लिए अलग-अलग संदेशों के साथ एक अपवाद प्रकार फेंक देता है। यदि उपयोगकर्ता विशेष रूप से त्रुटि को संभालने के लिए कुछ भी नहीं कर सकता है, तो उसी सामान्य अपवाद वर्ग का उपयोग करें। यदि उपयोगकर्ता उन्हें अलग-अलग संभालने में सक्षम है, तो वह तब होता है जब आपको पदानुक्रम का उपयोग करना चाहिए।
  • पदानुक्रमों के लिए, आधार अपवाद से प्राप्त विभिन्न घटकों के सभी अपवादों को न बनाएं। ऐसा करने का कोई वास्तविक कारण नहीं है। यदि उपभोक्ता कुछ भी पकड़ना चाहता है, तो वे बस अपवाद पकड़ सकते हैं।
  • पैकेज स्थान के लिए, मैंने एक अपवाद वर्ग को उस कोड के साथ रखा है जो इससे संबंधित है। तो अगर मेरे पास a.b.c पैकेज में व्यवसाय सेवा है, तो मेरे पास इसके साथ जाने के लिए a.b.c.BusinessException है। मैं अपवाद पैकेज में सभी अपवादों को डालने का प्रशंसक नहीं हूं। यह सिर्फ खोजने के लिए मुश्किल बनाता है।
2

भाषा उपयोगकर्ता द्वारा परिभाषित Exception कक्षाओं को किस पैकेज में रखा जाना चाहिए, इस बारे में कोई आवश्यकता निर्दिष्ट नहीं करता है। जब तक वर्ग java.lang.Throwable तक फैलाया जाता है, इसे फेंक दिया जा सकता है।

+3

मुझे लगता है कि पूछताछकर्ता इसके बारे में जानता है। उनका प्रश्न सर्वोत्तम प्रथाओं से अधिक संबंधित है। – Sergio

4

आप जहां चाहें अपनी अपवाद कक्षाएं बना सकते हैं।

महत्वपूर्ण बात यह है कि मौजूदा अपवाद वर्ग (java.lang.Throwable वास्तव में) का विस्तार करना महत्वपूर्ण है। उदाहरण के लिए java.lang.Exception या java.lang.RuntimeException। पहली बार एक चेक अपवाद है जबकि रनटाइम अपवाद को विस्तारित करने के परिणामस्वरूप एक अनचेक अपवाद होगा; दोनों के बीच अंतर here विस्तृत हैं।

11

मैंने अपने सभी कस्टम अपवादों को com.company.project.exception पैकेज में रखा है। मैं उन्हें उन स्थानों पर "करीबी" रखने के बजाय ऐसा करता हूं जहां वे फसल उगते हैं।

यहां मेरा तर्क है: यदि कोई दिया गया अपवाद केवल एक या दो सेवा कक्षाओं में ही फसल हो रहा है, तो यह अपनी कक्षा के लायक होने के लिए सामान्य पर्याप्त अपवाद नहीं हो सकता है। केवल अगर मैं कई जगहों पर पॉप-अप करने वाली एक आम थीम देखता हूं तो क्या मैं एक कस्टम अपवाद वर्ग बनाने की परेशानी पर जाऊंगा। और यदि यह कई स्थानों पर पॉप-अप हो रहा है, तो इसमें "संलग्न" करने के लिए कोई तार्किक पैकेज नहीं है, इसलिए अपवाद-विशिष्ट पैकेज जाने का सही तरीका लगता है।

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