Рубрики
Без рубрики

Эффективная Java: Не игнорируйте Исключения

Погружение в главу 77 “Эффективная Java”. Помеченный как java, эффективный, исключения, архитектура.

Эффективный обзор Java (Серия из 79 частей)

То, что, вероятно, кажется очевидным, но может быть заманчивым, – это игнорирование исключений. Это часто является серьезным предупреждением. Исключения чрезвычайно легко игнорировать, вы просто окружаете свой код, генерирующий исключения, try и пустым блоком catch .

Исключения возникают при возникновении исключительных обстоятельств, поэтому, игнорируя исключения, мы открываем себя для проблем. Эффективная Java сравнивает исключения с пожарной сигнализацией, вам может сойти с рук их игнорирование, или вы можете серьезно пострадать.

Так почему же кто-то хочет игнорировать исключение? Примером может быть игнорирование исключения при закрытии FileInputStream . Если вы не изменили состояние файла, поэтому восстановление невозможно, и ваше приложение уже прочитало то, что ему нужно, нет необходимости останавливать выполнение при исключении, возникающем при закрытии. Тем не менее, может быть веская причина для регистрации исключения, чтобы вы могли, по крайней мере, отслеживать события и по-прежнему учитывать их вне диапазона. Цель этой главы не в том, чтобы сказать, что игнорирование исключений всегда плохо, просто это всегда вызывает озабоченность и должно быть должным образом изучено.

Еще одна вещь, которую следует учитывать, заключается в том, что если исключение часто игнорируется, это может быть признаком того, что исключение создается ненадлежащим образом. Примером, с которым я взаимодействовал, являются методы удаления Spring Data. Когда запись, которую требуется удалить, не найдена, она выдает исключение EmptyResultDataAccessException . Это кажется неуместным, поскольку это просто означает, что хранилище уже находится в запрошенном мной состоянии. Я мог бы проверить, существует ли запись перед удалением, но это просто добавляет ненужные вычисления (а также все еще остается открытым для условий гонки, когда запись удаляется между проверкой ее существования и удалением), когда моя цель часто состоит в том, чтобы убедиться, что конкретная запись не существует. В этом случае я часто буду ловить исключение EmptyResultDataAccessException и оставлять комментарий в блоке catch о том, что “Все в порядке, запись не существовала”.

Независимо от причины, если после тщательного рассмотрения будет решено, что игнорирование конкретного исключения уместно, вам следует добавить комментарий к пустому блоку catch , объясняющий, почему исключение игнорируется. Это помогает будущим разработчикам (включая вас) знать, что было тщательно продумано, чтобы ничего не делать с конкретным исключением и объяснением причин.

Независимо от того, что это за исключение, каждое исключение заслуживает тщательного рассмотрения, прежде чем просто игнорировать его. Игнорируя исключения, мы продолжаем работу перед лицом ошибок и позволяем нашему приложению продолжать работу без какого-либо восстановления после исключения. Это может привести к сбою в будущем без информации об истинной первопричине. При правильной обработке наших исключений, даже если это просто комментарий, почему исключение игнорируется после рассмотрения его последствий, у нас остается лучший и безопасный код.

Эффективный обзор Java (Серия из 79 частей)

Оригинал: “https://dev.to/kylec32/effective-java-dont-ignore-exceptions-b1m”