Читатели журнала тоже пользователи приложения.

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

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

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

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

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

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

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