2013-03-06 1 views
2

У меня есть запрос об обработке ошибок в java. Предположим, что для библиотеки есть несколько кодов ошибок. Является ли хорошей практикой иметь единственное исключение и включать перечисление кодов ошибок в стороне, что для различных ошибок?Исключения и коды ошибок в Java

Обновление: Является ли хорошей практикой иметь коды ошибок в пределах исключения?

+3

Сделайте каждую ошибку своим собственным типом, после того как вы поймаете ошибку, вам придется выяснить, что это такое с методом enum. – andre

+1

Я бы выбрал иерархию типов исключений с общим суперклассом, поэтому вы можете поймать определенные, если хотите или поймать всех с помощью одного 'catch (ParentException e)' –

ответ

3

Не совсем. Вы должны использовать разные типы исключений, по одному для каждого типа ошибки (в разумных пределах, не создавайте сотни разных типов исключений!).

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

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

Это simple explanation ясно.

2

Текущая практика имеет по крайней мере один базовый класс (IOException) и дочерние классы, такие как FileNotFoundException, UnsupportedEncodingException. На стороне использования можно поймать все с помощью исключения IOException.

Это позволяет решать только FileNotFound.

С другой стороны, имея много кодов, таких как код ответа HTTP, ваш подход, имеющий только одно исключение, более чем оправдан.

4

ошибка и код ошибки это две отдельные вещи. Один определяет, что произошло, а другое определяет конкретный источник ошибки.

Наилучшим примером этого являются исключения, связанные с БД, где исключение SQL включает в себя код, определяющий причину ошибки, вызвавшую его.

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

  1. Выгода исключение, которое определяет контекст ошибки
    • безопасности
    • Database
    • Обработка
    • Синтаксический
    • Недопустимая операция
  2. Проверьте код исключения, чтобы определить источник
    • пользователь не имеет достаточно привилегий, чтобы сделать то, что он пытался сделать
    • базы данных Подключение errora
    • Запрос вопросов, связанных с
    • В настоящее время система перегружена
    • нет менеджеров не найдено для определенной операции

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

+0

, но дело в том, предположим метод метода A B, чтобы получить некоторую ценность. Некоторая ошибка возникает в B. Таким образом, лучший способ отметить, что ошибка B выбрасывает исключение. Но A должен вернуть код ошибки своему вызывающему. Как справиться с этой ситуацией? – prashanthkvs

+0

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

+0

@prashanthkvs То, что сказал X.L.Ant. Другой важной частью обработки исключений является управление их распространением. Если исключение проверено и B его выбрасывает, A вынужден его поймать или выбросить. Если исключение является неконтролируемым, вам нужно быть очень внимательным. – Gamb

2

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

Смежные вопросы