3. Istisno Holatlarni O‘rash
Checked-istisnolar nazariyada juda zo'r narsa kabi ko'ringan va amalda to'liq hafsala pir bo'lgan.
Faraz qilaylik, loyihangizda juda mashhur bir metod mavjud, u yuzlab joylardan chaqiriladi. Siz unga yangi checked-istisno qo'shishga qaror qilasiz. Va juda mumkin, bu checked-istisno shunchalik muhim va maxsuski, faqat main() metodi ushbu istisnoni ushlab olganda nima qilishini biladi.
Shunday qilib, siz checked-istisnoni throws qatoridagi barcha metodlarga qo'shishingiz kerak bo'ladi, ular sizning juda mashhur metodingizni chaqiradi. Shuningdek, bu metodlarni chaqiradigan metodlar va ularni chaqiradigan metodlar ham.
Natijada, throws qatorida loyihaning yarmidan ko'p metodlariga yangi checked-istisno qo'shiladi. Keyin esa, loyihangiz test bilan qoplanganligini va testlar kompilyatsiya qilinmasligini aniqlaysiz. Va throws-ni testlarda ham to'g'rilashingiz kerak bo'ladi.
Keyin esa, kodning barcha o'zgarishlari (yuzlab fayllarda) boshqa dasturchilar tomonidan ko'rib chiqilishi kerak bo'ladi. Va biz o'zimizga savol beramiz: nega biz loyihada bu qadar ko'p o'zgarishlar kiritdik? Bir kun yoki undan ko'p mehnat, buzilgan testlar, va hammasi bitta checked-istisno qo'shish uchunmi?
Yetmaganidek, meros olish va metodlarni qayta belgilash masalalari ham mavjud. Checked-istisnolardan ko'ra ko'proq muammolar bo'ladi. Umuman olganda, hozirda ularni kam odam sevadi va kam odam foydalanadi.
Ammo hali ham ko'p kod (shu jumladan Java standart kutubxonalari kodi ham) aynan mana shu checked-istisnolarni o'z ichiga oladi. Ular bilan nima qilish kerak? E'tiborsiz qoldirib bo'lmaydi, qanday ishlashni bilib bo'lmaydi.
Java dasturchilari checked-istisnolarni RuntimeException ichiga "o'rash"ni taklif qilishdi. Boshqacha qilib aytganda, barcha checked-istisnolarni ushlab, ularning o'rniga unchecked-istisnolar (masalan, RuntimeException) yaratish va ularni tashlash kerak. Bu quyidagicha ko'rinadi:
try
{
kod, checked-istisno paydo bo'lishi mumkin
}
catch(Exception exp)
{
throw new RuntimeException(exp);
}
Juda ham chiroyli yechim emas, lekin jinoyatga kirishmaydi: istisno shunchaki RuntimeException ichiga qo'yildi.
Istisnoni istasangiz, osongina olib chiqib olishingiz mumkin. Misol:
| Kod | Izoh |
|---|---|
|
RuntimeException obyekti ichida saqlangan istisnoni olamiz. cause null bo'lishi mumkinUning turini aniqlaymiz va uni checked-turiga aylantiramiz. |
GO TO FULL VERSION