#java #try-catch
Вопрос:
Как я могу выполнить рефакторинг ниже блока catch, в котором я использую код java11
public String methodName(ClassRequest request, Destination ABC) {
try {
<Some Code Here>
} catch (Exception e) {
log.error("error", ABC, e);
if(e instanceof ABCRestException ||
(ABC == PREM amp;amp; (e instanceof HttpServerErrorException || e instanceof HttpClientErrorException))) {
throw e;
} else if(e instanceof HttpServerErrorException) {
throw new ABCRestException(request.getAId(), "unexpected_error", "Some Message", e, INTERNAL_SERVER_ERROR);
} else if(e instanceof HttpClientErrorException) {
throw new ABCRestException(request.getAId(), "missing_field", "Some Message", e, BAD_REQUEST);
} else {
throw new ABCRestException(request.getAId(), "unexpected_error", "Some Massage", e, INTERNAL_SERVER_ERROR);
}
}
}
Как я могу провести рефакторинг этого кода, означает блокировку
Комментарии:
1. добавьте отдельные блоки улавливания
2. Могу ли я определить один блок catch? и объявите все исключения внутри блока catch
3. @PallaviSingh это неправильный способ, catch предназначен для конкретных исключений, поэтому вам не нужно использовать в
4. @PallaviSingh, что вы можете сделать, это вызвать метод внутри блока catch, передающий исключение, и запустить там некоторую общую логику
5. @PallaviSingh да, и именно поэтому он жалуется
Ответ №1:
вам просто нужно два таких блока улова, как этот
public String methodName(ClassRequest request, Destination ABC) {
try {
<Some Code Here>
} catch (HttpServerErrorException e) {
log.error("error", ABC, e);
if (ABC == PREM){
throw e;
}else{
throw new ABCRestException(request.getAId(), "unexpected_error", "Some Message", e, INTERNAL_SERVER_ERROR);
}
} catch (HttpClientErrorException e){
if (ABC == PREM){
throw e;
}else{
throw new ABCRestException(request.getAId(), "missing_field", "Some Message", e, BAD_REQUEST);
}
}
}
Если вы хотите повторно использовать некоторую логику, вы можете написать закрытый метод и вызвать его внутри блока catch
Если два или более исключений имеют одну и ту же точную логику, вы также можете использовать мульти-улов, который будет улавливать различные исключения в одном блоке
try{
codeGoesVroomVroomAndThrows()
}catch(ExceptionA | ExceptionB e){
//do something
}