Всегда используйте проверенные исключения
В последнее время я перефакторинг некоторого кода Java... Я обнаружил, что было выброшено много исключений RuntimeException (т.е. непроверенные исключения). Я создал свое собственное проверенное исключение и заменил каждый экземпляр этих RuntimeException на свое собственное исключение. Затем это заставило меня проверить исключения.
С учетом вышесказанного, я считаю проверенные исключения лучше, потому что другой разработчик позаботится о том, чтобы обработать исключения... Вместо того, чтобы просто проглатывать исключение, ничего не показывая пользователю.
Я прочитал много статей о непроверенных и проверенных исключениях. Однако я все еще чувствую, что проверял исключения больше, потому что это уменьшает человеческую ошибку.
Насколько плохим в программировании является использование проверенных исключений? Кто-нибудь еще чувствовал, что им нравятся проверенные исключения больше, чем непроверенные исключения?
2 ответа
Моя рекомендация, хотя разные люди будут иметь разные мнения по этому поводу, заключается в следующем:
- используйте проверенные исключения для исключительных условий, которые должны обрабатываться тем, что вы считаете частью логики вашего приложения, например: пользователь ввел несуществующее имя пользователя для входа в систему, пользователь попытался сохранить и элемент за пределом, разрешенным для ее подписки, и т. д. Таким образом, клиент кода, который находит исключительное условие, вынужден по крайней мере признать тот факт, что условие может возникнуть, и, надеюсь, будет обрабатывать его наиболее подходящим образом.
- использовать непроверенные исключения для раннего и шумного сбоя при обстоятельствах, не зависящих от вас и из которых вы не можете восстановиться с помощью логики приложения, например: ваша функция получает неверные параметры в качестве аргументов: звучит как идеальный сценарий для создания "исключения недопустимого аргумента", которое это исключение времени выполнения в большинстве языков программирования
Проверенные исключения выглядят великолепно, но на практике они просто не решают проблемы, для решения которых они предназначены (подробнее здесь https://arpytoth.com/2016/04/08/the-problem-with-checked-exceptions/),
Java не заставляет вас обрабатывать исключения, а просто вынуждает точно определить, через какие исключения они могут пройти. Большинство разработчиков ловят их, используя пустой блок, или пропускают исключения, используя предложение throws. Это снизит качество кода в целом, сделав его более подробным, сложным, а иногда и сложным для тестирования, без каких-либо существенных преимуществ. Также обратите внимание, что новые функции Java также плохо работают с проверенными исключениями (например, лямбда-выражениями). Мой совет - избегать проверенных исключений и использовать вместо этого среду выполнения.