Следует ли сообщать текст сообщения об исключениях?

Рассмотрим код, который может вызвать проверенное исключение (исключение типа Исключение ). Конечно, исключение составляет код catch . Вы также не просто проглатываете исключение, ваш код сообщает его каким-то образом пользователю через ваш пользовательский интерфейс. Возможно, во всплывающем окне файла журнала или с помощью графического интерфейса пользователя.

Если текст, о котором вы сообщаете пользователю, включает текст сообщения об особой ситуации. То есть текст, предоставленный Throwable.getMessage () или Throwable.getLocalizedMessage () ?

Я думаю, что нет, но, кажется, многие не согласны со мной. Так что я ошибся? Мой аргумент следующий.

  • Сообщение было создано при возникновении исключения. Поэтому в лучшем случае он может предоставлять только информацию очень низкого уровня, которая может быть неподходящей для сообщения пользователю.
  • Философски, использование сообщения кажется мне против всей точки исключений, которая состоит в том, чтобы отделить обнаружение и инициирование обработки ошибок (часть throw ) от завершения обработки и отчетности (часть catch ). Использование сообщения означает, что сообщение должно быть хорошим для отчетности, что перемещает ответственность за отчетность в местоположение, которое должно отвечать только за обнаружение и инициирование. То есть, я бы утверждал, что getMessage () часть конструкции Throwable была ошибкой.
  • Сообщение не локализовано. Несмотря на свое имя, метод getLocalizedMessage () не очень хорош, поскольку вы можете не знать, какой языковой стандарт вы хотите использовать до тех пор, пока не уловите исключение (отчет для перехода к системному журналу, прочитанному системными администраторами на английском языке, или он должен появиться в окне для французского пользователя графического интерфейса пользователя?).
  • Я слышал, что Java 7 имеет значительно улучшенную иерархию исключений для IOException , что позволяет обрабатывать различные типы ошибок ввода-вывода в различных предложениях catch , что делает текст getMessage () менее важным. Это означает, что даже дизайнерам Java несколько неудобно использовать getMessage () .

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

И я не спрашиваю о «передовой практике» для текста сообщения .

12
задан Raedwald 9 October 2019 в 09:21
поделиться