utilizzare un metodo per il codice comune.
try {
// do something...
}
catch (ExceptionA e) {
// actions for ExceptionA
doCommon(parameters);
}
catch (ExceptionB e) {
// actions for ExceptionA
doCommon(parameters);
}
.....
void doCommon(parameters) {
// actions for ExceptionA & ExceptionB
}
Questo funzionerà per la maggior parte delle cose.
Anche se ci sono alcune eccezioni come return
. Per questo si può avere doCommon
ritorno castrato il chiamante deve restituire o meno e usarlo come:
catch (ExceptionA e) {
// actions for ExceptionA
if (doCommon(parameters))
return;
}
catch (ExceptionB e) {
// actions for ExceptionA
if (doCommon(parameters))
return;
}
Una soluzione "nativo Java" non esiste. JLS specifica (sottolineatura mia):
14.20.1. Esecuzione di try-catch
Un'istruzione try senza un blocco finally viene eseguita eseguendo prima il blocco di prova . Poi c'è una scelta:
Se l'esecuzione del blocco try viene completata normalmente, non viene eseguita alcuna ulteriore azione e l'istruzione try viene completata normalmente.
Se l'esecuzione del blocco try completa bruscamente a causa di un lancio di un valore V, allora v'è una scelta:
Se il tipo di runtime di V è compatibile con assegnazione (§5.2) un classe di eccezione catchable di qualsiasi clausola catch dell'istruzione try, quindi la prima clausola catch (a sinistra) è selezionata.Il valore V viene assegnato al parametro della clausola catch selezionato, e viene eseguito il blocco di tale clausola catch, e quindi v'è una scelta:
Se quel blocco completa normalmente, allora l'istruzione try completa normalmente .
Se quel blocco si completa bruscamente per qualsiasi motivo, la prova viene completata improvvisamente per lo stesso motivo.
Se il tipo di runtime di V non è compatibile con l'assegnazione di una classe di catturabile eccezione di qualsiasi clausola catch dell'istruzione try, allora l'istruzione try completa bruscamente a causa di un lancio del V. valore
Quindi viene eseguito solo il primo blocco di catch che si applica. Non c'è modo di eseguire due blocchi catch per la stessa istruzione try.
creare una classe eccezione personalizzata. – ravi
È possibile inserire il codice nelle funzioni e richiamare le funzioni nel blocco catch. – Jens
@Jens Questa non è una soluzione, questo è semplicemente lo scaricamento del problema da qualche altra parte ... – insidesin