Используйте метод для общего кода.
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
}
Это будет работать для большинства вещей.
Хотя есть некоторые исключения, такие как return
. Для этого вы можете иметь doCommon
возвращение кастрированный баран абонент должен вернуть или нет, и использовать его как:
catch (ExceptionA e) {
// actions for ExceptionA
if (doCommon(parameters))
return;
}
catch (ExceptionB e) {
// actions for ExceptionA
if (doCommon(parameters))
return;
}
Решение «родной Java» не существует. JLS указывает (внимание мое):
14.20.1. Выполнение try-catch
Оператор try без блока finally выполняется, сначала выполнив блок try. Тогда есть выбор:
Если выполнение блока try завершается нормально, то никаких действий не предпринимается, и инструкция try завершается нормально.
Если выполнение блока Ьги завершается преждевременно из-за броском значение V, то есть выбор:
Если типа вводного времени V можно присвоить значение (§5.2) а catchable класс исключений любого предложения catch в заявлении try, , затем первое (самое левое) такое предложение catch выбрано.Значение V присваивается параметр выбранного пункта улова, а блока этого пункта поймать выполняется, а затем есть выбор:
Если блок завершается нормально, то оператор попытки завершается нормально ,
Если по какой-либо причине этот блок неожиданно завершает работу, то по этой же причине завершает работу оператор .
Если тип вводного времени V не уступка совместит с catchable класса исключения из любого пункта уловов заявления попробовать, то оператор попытки завершается преждевременно из-за броском значения V.
Таким образом, выполняется только первый блокирующий блок. Невозможно выполнить два блока catch для одного и того же оператора try.
Создайте свой собственный пользовательский класс исключений. – ravi
Вы можете поместить код в функции и вызвать функции в блоке catch. – Jens
@Jens Это не решение, это просто разгрузка проблемы в другом месте ... – insidesin