Подтвердить что ты не робот

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

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

Мой главный вопрос касается расположения пакетов, где должны быть определены классы Exception.

Создаем ли мы специальный пакет ourexceptions и помещаем в него все классы?

4b9b3361

Ответ 1

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

  • Где это имеет смысл, используйте предопределенное исключение Java. Например, если у вашего кода есть некоторая ошибка ввода-вывода, то отлично использовать исключение IOException.
  • Используйте только иерархии исключений, если вам нужно различать два исключения в блоке try/catch. Много раз отлично, чтобы один компонент выбрал один тип исключения с разными сообщениями для разных ошибок. Если пользователь не может действительно что-либо сделать для обработки ошибки, используйте тот же общий класс исключений. Если пользователь может обрабатывать их по-разному, то есть когда вы должны использовать иерархию.
  • Для иерархий не делайте все исключения из разных компонентов наследуемыми от базового исключения. Для этого нет реальной причины. Если потребитель хочет что-то поймать, они могут просто перехватить исключение.
  • В отношении расположения пакета я помещаю класс исключения с кодом, к которому он относится. Поэтому, если у меня есть BusinessService в пакете a.b.c, у меня есть a.b.c.BusinessException, чтобы пойти с ним. Я не поклонник поместить все исключения в пакет исключений. Это просто затрудняет поиск.

Ответ 2

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

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

Ответ 3

Вы можете создавать классы Exception везде, где хотите.

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

Ответ 4

Язык не указывает каких-либо требований к тем, для каких пакетов должны быть помещены пользовательские классы Exception. Пока класс расширяет java.lang.Throwable, он может быть сброшен.