У меня есть код, который дает идентификатор пользователя утилите, которая затем отправляет этому пользователю электронное письмо.
emailUtil.sendEmail(userId, "foo");
public void sendEmail(String userId, String message) throws MailException {
/* ... logic that could throw a MailException */
}
MailException
могло быть выброшено по ряду причин, из-за проблем с адресом электронной почты, проблем с почтовым шаблоном и т. Д.
Мой вопрос заключается в следующем: вы создаете новый тип исключения для каждого из этих исключений, а затем обрабатываете их индивидуально, или вы создаете одно исключение MailException, а затем сохраняете что-то в исключении (что-то машиночитаемое, а не текст описания), что позволяет нам делать разные вещи в зависимости от того, что произошло на самом деле.
Изменить: в качестве пояснения, исключения не относятся к журналам и тому подобному, это относится к тому, как код на них реагирует. Чтобы продолжить пример с почтой, предположим, что когда мы отправляем письмо, оно может завершиться ошибкой, потому что у вас нет адреса электронной почты, или потому, что у вас нет действительного адреса электронной почты, или он может выйти из строя .. и т. д.
Мой код хотел бы по-разному реагировать на каждую из этих проблем (в основном, изменяя сообщение, возвращаемое клиенту, но также и фактическую логику).
Было бы лучше иметь реализацию исключения для каждой из этих проблем или одно зонтичное исключение, в котором есть что-то внутреннее (скажем, перечисление), что позволяет коду различать, что это за проблема.