Как и где Вы определяете свою собственную иерархию Исключения в Java?

Как и где Вы определяете свою собственную иерархию Исключения в Java?

Мой основной вопрос касается местоположения пакета, где Ваши Классы исключений должны быть определены.

Мы создаем специальный пакет для наших исключений и помещаем все классы в нем?

30
задан Aprian Diaz Novandi 16 February 2018 в 13:15
поделиться

4 ответа

Я использую это как общее правило.

  • Там, где это имеет смысл, используйте предопределенное исключение Java. Например, если в вашем коде есть какая-то ошибка ввода-вывода, можно выбросить исключение IOException.
  • Используйте иерархию исключений только в том случае, если вам нужно различать два исключения в блоке try / catch. Часто вполне нормально, если один компонент генерирует исключение одного типа с разными сообщениями для разных ошибок. Если пользователь действительно не может ничего сделать для специальной обработки ошибки, используйте тот же универсальный класс исключения. Если пользователь может обрабатывать их по-другому, тогда вам следует использовать иерархию.
  • Для иерархий не делайте все исключения из разных компонентов наследуемыми от базового исключения. Для этого нет реальной причины. Если потребитель хочет что-то поймать, он может просто поймать Exception.
  • Для расположения пакета я помещаю класс Exception с кодом, к которому он относится. Так что, если у меня есть BusinessService в пакете a.b.c, у меня есть исключение a.b.c.BusinessException, чтобы пойти с ним. Я не фанат помещать все исключения в пакет исключений. Это просто затрудняет поиск.
29
ответ дан 28 November 2019 в 00:02
поделиться

Вы можете создавать свои классы исключений где угодно.

Важно расширить существующий класс Exception (на самом деле java.lang.Throwable ). Например, java.lang.Exception или java.lang.RuntimeException . Первое - это проверенное исключение, в то время как расширение RuntimeException приведет к непроверенному исключению; различия между ними подробно описаны здесь .

5
ответ дан 28 November 2019 в 00:02
поделиться

Я помещаю все свои пользовательские исключения в пакет com.company.project.exception . Я делаю это вместо того, чтобы помещать их «близко» к тем местам, где они появляются.

Вот мое рассуждение: если данное исключение возникает только где-то в одном или двух классах обслуживания, оно может быть недостаточно общим исключением, чтобы заслужить свой собственный класс. Только если я увижу, что общая тема появляется в нескольких местах, я возьму на себя труд создать собственный класс Exception. А если он появляется в нескольких местах, то нет никакого логического пакета, к которому его можно было бы «прикрепить», поэтому пакет, зависящий от исключения, кажется правильным путем.

12
ответ дан 28 November 2019 в 00:02
поделиться

В языке не указаны какие-либо требования к тому, какие пакеты, определяемые пользователем Исключение классы должны быть помещены in. Пока класс расширяет java.lang.Throwable , его можно выбросить.

1
ответ дан 28 November 2019 в 00:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: