3. रैपिंग अपवाद

जाँच किए गए अपवाद सिद्धांत में अच्छे लगते थे, लेकिन व्यवहार में एक बड़ी हताशा के रूप में सामने आए।

मान लीजिए कि आपकी परियोजना में एक सुपर लोकप्रिय तरीका है। आपके प्रोग्राम में सैकड़ों जगह से बुलावा आता है। और आप इसमें एक नया चेक किया गया अपवाद जोड़ने का निर्णय लेते हैं। और यह अच्छी तरह से हो सकता है कि यह चेक किया गया अपवाद वास्तव में महत्वपूर्ण और इतना खास है कि केवल main()विधि ही जानती है कि पकड़े जाने पर क्या करना है।

इसका मतलब है कि आपको अपने सुपर लोकप्रिय विधि को कॉल करने वाली प्रत्येक विधि के खंड में चेक किए गए अपवाद कोthrows जोड़ना होगा । साथ ही throwsउन सभी विधियों के उपवाक्य में जो उन विधियों को कहते हैं। और उन विधियों को जो उन विधियों को कहते हैं।

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

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

बेशक, इनहेरिटेंस और मेथड ओवरराइडिंग से जुड़ी समस्याएं अभी भी हैं। जाँच किए गए अपवादों से आने वाली समस्याएँ लाभ से बहुत बड़ी हैं। लब्बोलुआब यह है कि अब कुछ लोग उन्हें प्यार करते हैं और कुछ लोग उनका इस्तेमाल करते हैं।

हालाँकि, अभी भी बहुत सारे कोड (मानक जावा लाइब्रेरी कोड सहित) हैं जिनमें ये चेक किए गए अपवाद हैं। उनके साथ क्या किया जाना है? हम उन्हें नज़रअंदाज़ नहीं कर सकते, और हम नहीं जानते कि उनसे कैसे निपटें।

जावा प्रोग्रामर्स ने चेक किए गए अपवादों को RuntimeException. दूसरे शब्दों में, सभी चेक किए गए अपवादों को पकड़ें और फिर अनियंत्रित अपवाद बनाएं (उदाहरण के लिए RuntimeException) और उन्हें इसके बजाय फेंक दें। ऐसा करने से कुछ ऐसा दिखता है:

try
{
   // Code where a checked exception might occur
}
catch(Exception exp)
{
   throw new RuntimeException(exp);
}

यह एक बहुत सुंदर समाधान नहीं है, लेकिन यहां कुछ भी आपराधिक नहीं है: अपवाद केवल एक RuntimeException.

आप चाहें तो इसे वहां से आसानी से प्राप्त कर सकते हैं। उदाहरण:

कोड टिप्पणी
try
{
   // Code where we wrap the checked exception
   // in a RuntimeException
}
catch(RuntimeException e)
{
   Throwable cause = e.getCause();
   if (cause instanceof Exception)
   {
      Exception exp = (Exception) cause;
      // Exception handling code goes here
   }
}







वस्तु के अंदर संग्रहीत अपवाद प्राप्त करें RuntimeException। चर causeशायद null

इसके प्रकार का निर्धारण करें और इसे एक चेक किए गए अपवाद प्रकार में परिवर्तित करें।