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

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

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

В этой главе описывается, когда какой тип Throwable s должен быть выброшен. Два основных Выбрасываемые типы, с которыми мы в основном взаимодействуем, – это проверенные и непроверенные исключения. Основное различие между ними заключается в том, что проверенные исключения являются частью сигнатур методов, которые вынуждают вызывающую сторону каким-либо образом обрабатывать проверенные исключения (либо перехватывать исключение, либо передавать исключение вверх по стеку вызовов). Вопрос в том, когда вы должны использовать какой тип исключения.

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

Существует один тип Throwable , который мы пропустили, то есть Error s. Причина этого в том, что вы почти никогда не должны взаимодействовать с Error s. В соответствии с общепринятой конвенцией Ошибки s зарезервированы для того, чтобы JVM выдавала их, когда происходит что-то действительно неустранимое. Это означает, что вы никогда не должны перехватывать их (или Throwable , его суперкласс) или выбрасывать их за пределы AssertionError . Это распространяется на расширение непосредственно из базового класса Throwable . Это будет обрабатываться как проверенное исключение, однако это не то, что следует делать, либо расширяться из Exception , либо Исключение RuntimeException .

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

Хотя могут возникнуть некоторые разногласия по поводу того, когда следует использовать проверенные и непроверенные исключения, обеспечение согласованности во всем вашем коде имеет решающее значение и приведет к гораздо более удобному в обслуживании коду.

Оригинал: “https://dev.to/kylec32/effective-java-use-checked-exceptions-for-recoverable-conditions-2jh”