Bir sonunda bir yakalama olmadan bir java anti-desen blok blok mu?
Ben sadece bu gibi görünen bir kod sorun giderme sorun giderme oldukça acı verici bir deneyim oldu:
try {
doSomeStuff()
doMore()
} finally {
doSomeOtherStuff()
}
Sorun zor doSomeStuff çünkü giderme() sırayla doSomeOtherStuff neden olan bir durum. () da bir istisna. İkinci istisna (tarafından atılan son blok) atılan benim kod, ama olmadı bir kolu ilk istisna (atılan gelen doSomeStuff()), hangisi gerçek kök-neden sorunu.
Eğer bu kod yerine şöyle olsaydı, sorun aşikar olurdu:
try {
doSomeStuff()
doMore()
} catch (Exception e) {
log.error(e);
} finally {
doSomeOtherStuff()
}
Yani, sorum şu:
Sonunda bir blok herhangi bir catch olmadan kullanılan iyi bilinen bir java anti-desen bloğu? (Kesinlikle belli ki çok iyi bilinen bir anti-desen-hazır-belli bir alt sınıf gibi görünüyor "istisnalar süpürmek Yok")!
CEVAP
Genel olarak, Hayır, bu anti-desen-bir değildir. Nihayet blokları emin şeyler yapmak noktasında bir özel durum olup olmadığını temizlenmiş olur. Bütün mesele bu istisna yönetimi, eğer anlaşma ile, size izin kabarcık kadar yapabilecek birini, nispeten temiz bant dışı sinyal özel durum işleme sağlar. Eğer bir şeyler varsa, bir özel durum temizlemiş olur, ama düzgün geçerli kapsamda istisna işleyebilir emin olmak için gerekiyorsa, o zaman bu tam olarak yapmak için doğru şey olduğunu. Sadece sonunda blok atmaz emin yapma konusunda biraz daha dikkatli olmak isteyebilirsiniz.
Nasıl bir API uygularken blok kendi ke...
Eğer sonunda bir blok bir özel durum o...
Genişliği olmadan bir div blok ortalam...
satırları sayma olmadan metin büyük bi...
Java idam statik blok...