3. Sarma istisnaları
Kontrol edilen istisnalar teoride harika görünüyordu, ancak pratikte büyük bir hayal kırıklığı olduğu ortaya çıktı.
Diyelim ki projenizde çok popüler bir yönteminiz var. Programınızdaki yüzlerce yerden çağrılır. Ve buna yeni bir işaretli istisna eklemeye karar veriyorsunuz . Ve bu kontrol edilen istisna gerçekten önemli ve o kadar özel olabilir ki, main()
yakalanırsa ne yapacağını yalnızca yöntem bilir.
Bu, süper popüler yönteminizi çağıran her yöntemin yan tümcesine işaretli istisnayı eklemeniz gerekeceğithrows
anlamına gelir . throws
Bu yöntemleri çağıran tüm yöntemlerin yan tümcesinde olduğu gibi . Ve bu yöntemleri çağıran yöntemlerden.
Sonuç olarak, throws
projedeki yöntemlerin yarısının yan tümceleri yeni bir kontrol edilen istisna alır. Ve tabii ki projeniz testlerle kapsanıyor ve artık testler derlenmiyor. Ve şimdi, testlerinizde throws yan tümcelerini de düzenlemeniz gerekiyor.
Ve sonra tüm kodunuz (yüzlerce dosyadaki tüm değişiklikler) diğer programcılar tarafından gözden geçirilmelidir. Ve bu noktada kendimize neden projede bu kadar çok kanlı değişiklik yaptığımızı soruyoruz. Çalışma günleri ve başarısız testler - hepsi kontrol edilen bir istisna eklemek uğruna mı ?
Ve tabii ki, kalıtım ve metot geçersiz kılma ile ilgili problemler hala var. Kontrol edilen istisnalardan kaynaklanan sorunlar, faydadan çok daha büyüktür. Sonuç olarak, artık çok az insan onları seviyor ve çok az insan kullanıyor.
Ancak, kontrol edilen bu istisnaları içeren çok sayıda kod (standart Java kitaplık kodu dahil) vardır . Onlarla ne yapılmalı? Onları görmezden gelemeyiz ve onlarla nasıl başa çıkacağımızı bilmiyoruz.
Java programcıları, kontrol edilen istisnaları RuntimeException
. Başka bir deyişle, kontrol edilen tüm istisnaları yakalayın ve ardından kontrol edilmeyen istisnalar oluşturun (örneğin, RuntimeException
) ve bunların yerine onları atın. Bunu yapmak şuna benzer:
try
{
// Code where a checked exception might occur
}
catch(Exception exp)
{
throw new RuntimeException(exp);
}
Bu çok hoş bir çözüm değil, ama burada suç teşkil eden hiçbir şey yok: istisna basitçe bir RuntimeException
.
İstenirse, oradan kolayca alabilirsiniz. Örnek:
kod | Not |
---|---|
|
Nesnenin içinde saklanan istisnayı alın RuntimeException . Değişken cause , null türünü belirleyebilir ve kontrol edilen bir istisna türüne dönüştürebilir. |
GO TO FULL VERSION