böyle Java'da aynı türden farklı istisnalar işleniyor mu?
Exception, IOException, SocketException, etc.
Ancak nasıl istisna üzerindeki asıl mesele ayrıntıları bulmaya devam do
gibi süper sınıf caugh olan hataları görmek çok yaygındır Java hataları, tutarken? Belirli bir istisna türünü diğerlerinden nasıl ayırırsınız. Örneğin, şu anda adlandırabileceğiniz her tür okuma/yazma hatası için bir IOException atanNetty.io
kullanarak küçük bir proje üzerinde çalışıyorum. Bu mantıklı, çünkü sonuçta bu girdi/çıktı hatalarıdır, ancak bunları ayrı ayrı nasıl ele alırdım.
Örnek istisnalar:
java.io.IOException: An existing connection was forcibly closed by the remote host
java.io.IOException: Connection reset by peer
java.io.IOException: Stream closed
liste sadece devam devam ediyor ama nasıl bu ayrı, etrafa bakarken buldum ve gerçekten kötü görünüyor ettik bir yaklaşım şudur taşıma konusunda gider. Bir correct
yolu eğer olacak
try {
// ...
} catch (IOException e) {
if(e.getMessage().contains("An existing connection was forcibly closed by the remote host")) {
// Handle error
} else //...
}
Bu, çok sıkıcı görünüyor ve bunu yapmak için daha iyi bir yol olarak kaçınılmazdır. Son birkaç saat zarfında yazım hatalarını inceledim ve hepsi sadece yaygın olarak kullanılan büyük çocuklar hakkında konuşuyorlar. IOException, Exception, SocketException, NullPointerException, and FileNotFoundException
. SocketException
ve FileNotFoundException
'un doğrudan doğruya IOException
ile ilgili olacağını düşündüğüm, muhtemelen bir alt sınıftan daha fazlası, yanılıyorsam düzeltin.
Her neyse, bu özel durumları ele almanın doğru yolu nedir ve ne tür bir istisnayı ele almanız gerektiğini tam olarak nasıl anlayabilirsiniz? Tek yapabildiğim, daha kesin bir şey gelene kadar IOException
'u ele almaktır, ancak uygulamaları geliştirirken her hatayı benzersiz şekilde ele almak her zaman iyidir.
: Bunu öğrendikten sonra , daha sonra, en genel IOException birden yakalama blokları, ilk alt sınıfları kullanabilirsiniz. Sonra, uzmanlıklarını tanımak için mesajlarıyla uğraşmanıza gerek yok. –
Kullandığınız kitaplık yalnızca farklı iletilerle "IOException" atarsa, ayırma yapmanın tek yolu dize karşılaştırmasıdır. Farklı vakaları farklı şekilde ele alabileceğinden emin misin? Pratikte, bireysel istisnaları nadiren düzgün bir şekilde ele alabiliyordum, bu nedenle, sadece benzer istisnaların hepsinin aynı şekilde ele alınmasıyla bu sorunun önüne geçilmiş oluyor. – Richard
@Richard Kütüphane, yalnızca 'IOException' yazmak için * bildirilmiş olabilir, ancak bu durum türetilmiş istisnalar atamadığı anlamına gelmez. Denemelisin. – EJP