Quando la gestione degli errori in Java è comune vedere le superclassi essendo gli errori che sono Caugh, comeGestione di diverse eccezioni dello stesso tipo in Java?
Exception, IOException, SocketException, etc.
Tuttavia come si fa a trovare i dettagli essenziali sul l'eccezione? Come si fa a selezionare una determinata eccezione dagli altri. Ad esempio, attualmente sto lavorando a un piccolo progetto utilizzando Netty.io
che genera un'eccezione IOException per ogni tipo di errore di lettura/scrittura che è possibile assegnare. Questo ha senso, perché alla fine si tratta di errori di input/output, ma come gestirli singolarmente.
eccezioni Esempio:
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
la lista continua solo ad andare avanti, ma come si va sulla gestione di questi separatamente, un approccio che ho trovato mentre guardando in giro e sembra davvero brutto è la seguente.
try {
// ...
} catch (IOException e) {
if(e.getMessage().contains("An existing connection was forcibly closed by the remote host")) {
// Handle error
} else //...
}
Questo sembra molto noioso e non è destinato ad essere un modo migliore per fare questo, un modo correct
se si vuole. Ho esaminato un bel po 'di errori nella gestione delle annotazioni nelle ultime ore e tutti parlano solo dei ragazzini che vengono usati comunemente. IOException, Exception, SocketException, NullPointerException, and FileNotFoundException
. Dove credo che SocketException
e FileNotFoundException
siano direttamente correlati allo IOException
, più che probabile una sottoclasse, correggimi se sbaglio.
In ogni caso, qual è il modo corretto per gestire queste eccezioni e come si individua esattamente quale tipo di eccezione è necessario gestire? Tutto quello che posso veramente fare è gestire IOException
fino a quando qualcosa di più preciso si presenta, ma quando si sviluppano applicazioni è sempre bene essere in grado di gestire ogni errore in modo univoco.
Quando lo sviluppo di applicazioni, si dovrebbe incapsulare le eccezioni che meritano di essere gestita in modo diverso come eccezioni di tipo diverso. Quindi non è necessario gestire i loro messaggi per conoscere le specialità. –
Poiché la libreria utilizzata usa solo 'IOException' con messaggi diversi, il confronto delle stringhe è l'unico modo per distinguere. Sei sicuro di poter e gestire i diversi casi in modo diverso? In pratica ho scoperto che raramente si gestiscono correttamente le eccezioni individuali, quindi questo problema viene evitato trattando tutte le eccezioni simili allo stesso modo. – Richard
@Richard La libreria può essere stata * dichiarata * solo per generare "IOException", ma ciò non significa che non possa generare eccezioni derivate. Dovresti sperimentare. – EJP