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

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

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

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

Однако почему необходимость обрабатывать проверенные исключения беспокоит разработчиков? Я бы предположил, что это потому, что они не знают, как обрабатывать исключение. Из-за этого компилятор заставляет вас обрабатывать это, что ставит разработчика в трудное положение, когда ни один выбор не кажется правильным. Я полагаю, что именно в этом и заключается разница. Если, чаще всего, разработчик, которому представлено проверенное исключение, имеет четкий способ его обработки, я думаю, что это хорошее использование проверенного исключения. Это заставляет разработчика делать то, что он уже хочет сделать. Однако, если нет четкого пути продвижения вперед, проверяемое исключение – неправильный путь. Это действительно влечет за собой сложную задачу, как вы можете узнать во время разработки API, какие исключения будут иметь разумные способы обработки во время использования API? Именно по этой причине я бы допустил ошибку на стороне исключений во время выполнения, если вы не абсолютно уверены.

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

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

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

Оригинал: “https://dev.to/kylec32/effective-java-avoid-unnecessary-use-of-checked-exceptions-59je”