#java #exception
#java #исключение
Вопрос:
У меня есть метод, который должен выполнять откат, если в службе возникает исключение. В блоке исключений служба отката выдает исключение при сбое. Я создал службу для отката, но я передаю exception в качестве аргумента второму методу. это плохая практика?
public static void method1() {
try{
//do something that can throw exception
} catch (Exception e) {
method2(data, e);
}
}
public static void method2(String data, CustomException ce) {
try{
// rollback service that could fail
} catch(Exception e) {
log.warn("rollback failed!!!");
ce.addSuppressed(e);
}
}
Комментарии:
1. «это плохая практика?» Нет.
2. Единственная причина, по которой я спросил, заключалась в том, что кто-то сказал мне не делать этого и попросил просто поместить это везде, где должен был произойти откат.
Ответ №1:
В конце концов, Exception
s — это обычные объекты Java с добавленным свойством, согласно которому они могут быть выброшены. Если бы мы отрицали Exception
s в качестве параметров, это лишило бы нас возможности, например, иметь централизованные методы-обработчики для Exception
s (концепция, найденная, например, в JavaEE ExceptionMapper
). Если бы мы запретили использование Exception
s в качестве параметров, мы, скорее всего, нарушили бы принцип DRY и, скорее всего, принцип разделения проблем. Оба из которых могут привести к усложнению чтения и поддержки кода.
Кроме того, если один из наших методов принимает Object
(или Object...
или Collection<Object>
, …) в качестве параметра, мы не можем предотвратить, что, возможно, Exception
передается в качестве параметра.
В заключение, я не вижу причин, по которым передача Exception
в качестве параметра метода должна быть плохой практикой.