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

Образец обработки исключений

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

Альтернативой, по-видимому, является объявление класса для случая исключения EVERY exception (хотя связанные исключения исключались из общего базового класса)

Есть ли средняя точка? какой рекомендуемый метод?

4b9b3361

Ответ 1

Это хороший вопрос. Я считаю, что есть определенная точка зрения.

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

Для программной обработки ошибок я лично не рекомендую коды ошибок, я бы рекомендовал новый класс для каждой категории ошибок, но определенно не для каждой отдельной ошибки. Java позаботилась о том, чтобы начать работу с исключениями, такими как IOException, IllegalArgumentException, UnsupportedOperationException и т.д. Я часто бросаю и улавливаю их, когда это необходимо в моем коде.

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

Ответ 2

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

Если вы все равно должны поймать КАЖДОЕ (или почти) любое исключение, а обработка большинства из них почти идентична (например, ошибка печати и завершение работы), наличие 1 класса с номером исключения в нем имеет смысл, поскольку это более простой дизайн.

Ответ 3

Чтобы ответить на ваш конкретный вопрос: ваше решение должно основываться на том, как и почему будут обрабатываться ваши исключения. Вы хотите сделать свою программу максимально надежной и удобно реагировать на все возможные сценарии ошибок индивидуально? Тогда вы действительно должны создать класс исключения для каждой возможной ошибки, которую вы можете идентифицировать. В противном случае лучше всего решать каждый случай индивидуально.

Существует ряд очень распространенных ошибок, которые ставят под угрозу стабильность всей вашей программы (например, ClassNotFoundException или NoSuchMethodException) - это определенно необходимо обрабатывать. Существуют и другие ошибки, которые тесно связаны друг с другом, что приводит к аналогичным проблемам - они могут быть сгруппированы или организованы иерархически (IOException означает всевозможные ошибки, связанные с вводом или выводом, NetworkIOException стоит только для ошибок ввода и вывода связанные с доступом к сети и т.д.).

Гораздо важнее, чем имя исключения и иерархия классов, на мой взгляд, это то, что вы с ним делаете: где вы размещаете блоки try/catch? Какие записи журнала должны быть записаны для какого файла журнала? Кто должен быть уведомлен? Какие сообщения об ошибках должны быть представлены только администраторам/разработчикам? Какие ошибки должны быть переданы конечному пользователю?

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

Ответ 4

"Средняя земля", как я вижу, заключается в использовании внутренних "кодов ошибок" (общая схема, но не ОЧЕНЬ распространенная, ИМО) в качестве дополнительной информации для целей отчетности/информации; но не для того, чтобы решить, кто ловит исключение (это определяется классом исключений).