java - जावा में एक अनचेक अपवाद में एक जाँच अपवाद लपेटें?




exception checked-exceptions (3)

आप इसे सही तरीके से कर रहे हैं

जांच किए बिना अपवादों को पारित करने के क्रम में, उन्हें बिना जांच के अपवादों में लपेटा जाना चाहिए।

बस याद है, अपवाद एक कारण के लिए जाँच कर रहे हैं

जावा में इस कारखाने की विधि है:

public static Properties getConfigFactory() throws ClassNotFoundException, IOException {
    if (config == null) {
        InputStream in = Class.forName(PACKAGE_NAME).getResourceAsStream(CONFIG_PROP);
        config = new Properties();
        config.load(in);
    }
    return config;
}

और मैं दो चेक अपवादों को अनियंत्रित अपवादों में बदलना चाहता हूं। इस के बारे में जाने के लिए सबसे अच्छा तरीका क्या है?

क्या मुझे अपवाद को पकड़ना चाहिए और आंतरिक अपवाद के रूप में पकड़े हुए अपवाद का उपयोग करके एक नया रनटाइम एक्सपैशन फेंकना चाहिए?

क्या यह करने का एक बेहतर तरीका है या क्या मैं इसे पहली जगह में करने का प्रयास कर रहा हूं?

संपादित करें:
केवल स्पष्ट करने हेतु। ये अपवाद घातक होंगे, क्योंकि कॉन्फ़िगरेशन फ़ाइल प्रोग्राम के संचालन के लिए अनिवार्य रूप से है और सभी अपवाद मेरे कार्यक्रम के शीर्ष स्तर पर पकड़े गए और लॉग इन किए जाएंगे।

मेरा उद्देश्य एक अनावश्यक फेंकता अपवाद से बचने के लिए है, अपवाद प्रत्येक विधि के हस्ताक्षर में जोड़ा गया है जो कि मेरा कारखाना कहता है।


एक RuntimeException का उपयोग केवल तभी किया जाना चाहिए, जब क्लाइंट समस्या से जो कुछ भी ठीक नहीं हो सकता है आप जो बात कर रहे हैं उसे करना कभी-कभी उपयुक्त है, लेकिन अधिक बार यह उचित नहीं है।

यदि आप जेडीके> = 1.4 का उपयोग कर रहे हैं, तो आप ऐसा कुछ कर सकते हैं:

try {
  // Code that might throw an exception
} catch (IOException e) {
  throw new RuntimeException(e);
} catch (ClassNotFoundException e) {
  throw new RuntimeException(e);
}

और पुनर्स्थापना RuntimeException मूल कारण इसके अंदर शामिल होगा। इस तरह, RuntimeException को पकड़ने वाले धागे के शीर्ष पर कोई - आपका धागा RuntimeException पकड़ कर लेते हैं ताकि वे चुपचाप मर न जाएं, है ना? - कम से कम कारण के पूर्ण स्टैक ट्रेस को प्रिंट कर सकते हैं।

लेकिन जैसा कि दूसरों ने कहा है और कहेंगे, एक कारण के लिए अपवाद की जांच की जाती है। केवल जब आप सकारात्मक होते हैं, तो ऐसा ही करें कि आपके ग्राहक समस्या से ठीक नहीं हो सकते हैं जो आप एक अनचाहे अपवाद के रूप में पुनर्स्थापित कर रहे हैं

नोट: सिर्फ RuntimeException तुलना में बेहतर होगा यदि एक उपलब्ध है तो एक अधिक विशिष्ट अनचेक अपवाद का उपयोग करना होगा। उदाहरण के लिए, यदि एकमात्र कारण यह है कि आपका तरीका ClassNotFoundException फेंक सकता है, क्योंकि एक कॉन्फ़िगरेशन फ़ाइल अनुपलब्ध है, आप एक MissingResourceException कर सकते हैं, जो एक अनचेक अपवाद है लेकिन आप इसे क्यों फेंक रहे हैं इसके बारे में अधिक जानकारी प्रदान करता है अन्य अच्छा RuntimeException एस का उपयोग करने के लिए यदि वे समस्या का वर्णन करते हैं जो आप पुनर्स्थापित कर रहे हैं तो अवैधस्टेट अपवाद, TypeNotPresentException और UnsupportedOperationException TypeNotPresentException

यह भी ध्यान रखें कि आपके धागे को हमेशा रनटाइम एक्सपैशन को पकड़ने और कम से कम लॉग इन करने के लिए यह एक अच्छा विचार है। कम से कम इस तरह से आप समझते हैं कि आपके सूत्र क्यों दूर जा रहे हैं


यहां सर्वोत्तम अभ्यासों को अपवाद से निपटने का एक अच्छा संकलन है

वहां से दो अंक:

  • कॉलर कोड अपवाद के बारे में कुछ भी नहीं कर सकता -> इसे एक अनचाहे अपवाद बनाएं
  • कॉलर कोड अपवाद में जानकारी के आधार पर कुछ उपयोगी पुनर्प्राप्ति कार्रवाई करेगा -> इसे एक चेक अपवाद बनाएं

और आप कॉलर के साथ क्या कर सकते हैं, इसके आधार पर आप बिना अपवाद के साथ या इसके बिना रनटाइम अपेशन फेंक सकते हैं। यदि आप आंतरिक अपवाद को पुनर्स्थापित नहीं कर रहे हैं, तो आपको अपनी विधि में लॉग इन करना चाहिए, यदि महत्वपूर्ण हो





checked-exceptions