Zastosować metodę dla wspólnego kodu.
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
}
To zadziała dla większości rzeczy.
Chociaż istnieją pewne wyjątki, takie jak return
. Do tego można mieć doCommon
zwrot pogoda rozmówca musi wrócić lub nie i używać go jako:
catch (ExceptionA e) {
// actions for ExceptionA
if (doCommon(parameters))
return;
}
catch (ExceptionB e) {
// actions for ExceptionA
if (doCommon(parameters))
return;
}
Rozwiązanie „native Java” nie istnieje. JLS określa (podkreślenie moje):
14.20.1. Wykonywanie próbnego catch
Instrukcja try bez bloku finally jest wykonywana przez wykonanie pierwszego bloku . Następnie istnieje możliwość wyboru:
Jeśli wykonanie bloku try zakończy się normalnie, nie zostanie podjęte dalsze działanie , a instrukcja try zakończy się normalnie.
Jeżeli wykonanie bloku try kończy się nagle z powodu rzutu wartość V, po czym istnieje możliwość wyboru:
Jeśli typ run-time V jest kompatybilny z przypisania (§5.2) A klasa wyjątków catchable dowolnej klauzuli catch instrukcji try, , następnie pierwsza (po lewej) taka klauzula catch została wybrana jako.Wartość V jest przypisany do parametru wybranego klauzuli catch, a Blok tej klauzuli catch jest wykonywany, a następnie istnieje możliwość wyboru:
Jeśli blok kończy się normalnie, wtedy instrukcja try zakończy normalnie .
Jeśli ten blok zakończy się nagle z jakiegokolwiek powodu, to instrukcja wypróbowania kończy się nagle z tego samego powodu.
Jeśli typ run-time V nie jest przyporządkowanie kompatybilny z połów klasy wyjątkiem klauzuli catch w instrukcji try, następnie oświadczenie próba kończy się nagle z powodu rzut z wartości V.
Wykonywany jest tylko pierwszy blok catch. Nie ma sposobu na wykonanie dwóch bloków catch dla tej samej instrukcji try.
Stwórz własną niestandardową klasę wyjątku. – ravi
Możesz wstawić kod do funkcji i wywołać funkcje w bloku catch. – Jens
@Jens To nie jest rozwiązanie, po prostu wyładowanie problemu gdzieś indziej ... – insidesin