Of course this is just my opinion, and it might not be the right one, but it looks like a good approach to me. I will see after I will release the project if what I think it is good for me, it is good for others too... :)

ение ряда лет я не мог получить достойный ответ на следующий вопрос: почему некоторые разработчики так против проверенных исключений? У меня было много разговоров, читал что-то в блогах, читал то, что говорил Брюс Экель (первый человек, которого я видел, выступал против них).

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

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

В общем (от того, как Java был разработан),

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

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

Еще один распространенный аргумент, который я слышу, это то, что проверенные исключения затрудняют рефакторинг кода.

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

Для толпы «это затрудняет рефакторинг», это указывает на то, что правильный уровень абстракции не был выбран. Вместо того чтобы объявлять метод, генерирующий IOException, IOException следует преобразовать в исключение, которое больше подходит для происходящего.

У меня нет проблем с переносом Main с catch (Exception) (или в некоторых случаях catch (Throwable), чтобы программа могла корректно завершиться - но я всегда ловлю конкретные исключения, которые мне нужны. Это позволяет мне, по крайней мере, отобразить соответствующее сообщение об ошибке.

Вопрос, на который люди никогда не отвечают, заключается в следующем:

Если вы бросаете подклассы RuntimeException вместо подклассов Exception, то как вы узнаете, что вы должны ловить?

Если ответом является catch Exception, то вы также имеете дело с ошибками программиста так же, как системные исключения. Это кажется мне неправильным.

Если вы перехватываете Throwable, то вы обрабатываете системные исключения и ошибки ВМ (и тому подобное) одинаково. Это кажется мне неправильным.

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

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

Итак, если вам не нравятся отмеченные исключения, можете ли вы объяснить, почему нет И ответьте на вопрос, на который нет ответа, пожалуйста?

Изменить: я не ищу совет о том, когда использовать любую модель, что я ищу, так этоПочему люди расширяются от RuntimeException, потому что им не нравится расширяться от Exception и / или почему они ловят исключение и затем перебрасывают RuntimeException вместо того, чтобы добавлять броски в их метод. Я хочу понять мотивацию неприязни к проверенным исключениям.

Ответы на вопрос(30)

Ваш ответ на вопрос