Checked или unchecked
Вопрос
Когда вы используете checked-исключения, а когда unchecked? Как обычно строите обработку ошибок в сервисе?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Checked: ожидаемый внешний сбой, который вызывающий реально обработает
Unchecked: ошибки программиста и неустранимые ситуации
Checked плохо работают с лямбдами и протекают через слои
Свои доменные исключения, наследники RuntimeException, с cause
Обработка в одном месте: глобальный обработчик, перевод в HTTP-ответ
Не глотать, логировать один раз
Что могут спросить следом
- Почему Spring переводит SQLException в DataAccessException?
- Как вы обрабатываете исключения в стримах?
Разбор
Checked-исключение заставляет вызывающего его обработать, это оправдано, когда сбой ожидаем и с ним реально можно что-то сделать: файл не найден, предложить другой путь. Ошибки программиста вроде null или неверного аргумента unchecked. На практике в сервисах я делаю доменные исключения наследниками RuntimeException: checked плохо сочетаются с лямбдами и стримами и заставляют каждый слой писать throws. Всегда передаю cause, чтобы не потерять исходную ошибку. Обработка централизована: в Spring это @RestControllerAdvice, который переводит исключения в HTTP-ответы. Логирую один раз, там, где обрабатываю, а не на каждом уровне. Пустых catch не допускаю, InterruptedException обрабатываю с восстановлением флага.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.