Почему проверенные и непроверенные исключения называются «противоречиями» в руководстве по Oracle Java?

10

Я новичок в Java и читал документацию по исключениям. и, в частности, « Непроверенные исключения» - страница «Противоречие» .

Суть говорит:

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

Я не понимаю статью. О чем «спор»? Можете ли вы объяснить это простыми словами?

ABcDexter
источник
Пожалуйста, смотрите обновленный вопрос, я не чувствую, что это дубликат :)
ABcDexter
3
«Я пытался это прочитать», - что случилось?
бесполезно
2
Это называется так, потому что вокруг этой темы много споров. См. Также этот вопрос StackOverflow: дело против проверенных исключений, в котором упоминается несколько цитат известных / влиятельных людей
Халк,

Ответы:

3

Сначала я приведу вам пример (но в самом конце - ответ, почему спор).

Предположим, что вы редактируете документ в редакторе документов на основе Java, и после того, как вы это сделаете, вы выбираете Файл-> Сохранить как ... и решили сохранить документ в том, на который у вас нет разрешения на запись. Редактор не вылетит на вас с уродливой трассировкой стека, он просто скажет вам, что не может сохранить файл и позволит вам продолжить редактирование и / или сохранение в другом месте.

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

С другой стороны, нужно добавить в них деление на ноль или исключение нулевого указателя, вызванное ошибкой программирования, которая поднимает свою уродливую голову только в определенных условиях. Это может произойти где угодно в коде, ОЗУ может быть повреждено и т. Д. Ни один документ API не скажет вам, что «этот метод выкинул бы деление на ноль, если ОЗУ повреждено» .

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

Противоречие возникает из-за того, что программисты используют непроверенные исключения (начиная с RuntimeException), когда они должны использовать проверенные исключения:

  • как ярлык, чтобы не беспокоить компилятор
  • чтобы их подписи выглядели проще
  • потому что они считают, что проверенные исключения являются проблемой зависимости (если вы добавляете новое проверенное исключение в реализующий класс, вы должны изменить сигнатуру интерфейса) и наоборот.
Тулаинс Кордова
источник
«Вы должны изменить сигнатуру интерфейса» - ну, вы даже вынуждены это сделать компилятором, и вам придется обрабатывать или объявлять, что она будет выброшена на каждом сайте вызова.
Халк
3
Правильно ли обрабатывает пользовательское приложение ошибку в удобном для пользователя виде, зависит от того, насколько хорошо программист написал код. Таким образом, они могут написать код с непроверенными исключениями, точно так же, как кто-то другой может неправильно обработать ошибки с проверенными исключениями. Намерение проверяемых исключений , чтобы сделать его проще для программистов , чтобы правильно обрабатывать ошибки. Противоречие не в том, что вы утверждали здесь, а в том, действительно ли они действительно достигают этой цели, фактически облегчая обработку ошибок. По мнению многих, они этого не делают; они делают это сложнее.
Serv
@Servy Каким удобным для пользователя способом приложение пользовательского интерфейса может справиться с неисправным чипом ОЗУ или с отсутствием циклов ЦП из-за сбоя другого программного обеспечения?
Тулаинс Кордова
1
@ TulainsCórdova В любом из этих случаев программа даже не запускается , поэтому период обработки исключений не выполняется , поэтому то, как вы пытаетесь изобразить ошибку, не имеет значения, когда вы даже не можете запустить какой-либо из ваших код, когда это произойдет.
Serv
1
@ TulainsCórdova Вам не обязательно приходилось сталкиваться с ошибкой, чтобы ее исправить, но да, компилятор не скажет вам, что она может быть выдана. Спор заключается в том, действительно ли полезен компилятор, сообщающий вам, что исключение может быть выдано. Некоторые думают, что это так, некоторые думают, что это не так. Вопрос здесь в том, что такое спор , и это ответ. Ваше утверждение о том, что является основным противоречием проверенных исключений, не так ли.
Serv
-4

На этой странице нет противоречий. Это Oracle говорит людям использовать проверенные исключения.

Фальшивая «дискуссия», которую они здесь придумали, происходит между разработчиками языка и пользователями языка. Дизайнеры позволили людям бросать и ловить вещи, которые (по их мнению) не следует бросать или ловить. Поэтому они создали веб-страницу с жалобами на ленивых разработчиков.

ascotan
источник
4
Там является полемика , даже если эта страница мало говорит об этом. Спорным является ответ на вопрос: «Проверенные исключения помогают или мешают разработке более качественного программного обеспечения?» И «Если это так, какие исключения должны быть проверены, а какие нет?» Держу пари, что вы могли бы начать оживленную дискуссию, если бы вы собрали достаточно разработчиков (и пива) в комнате, чтобы ответить на эти вопросы.
Соломон Слоу