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

এবং এটিকে চেক করা ব্যতিক্রম টাইপে রূপান্তর করতে পারে।