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