¿Debería informar el texto del mensaje de excepciones?

Considere algún código que pueda generar una excepción marcada (una excepción de tipoException). Tu codigocatches la excepción, por supuesto. No solo se traga la excepción, su código lo informa de alguna manera al usuario a través de su interfaz de usuario. En un archivo de registro, tal vez, o usando una ventana emergente GUI.

¿Debería el texto que informa al usuario incluir el texto del mensaje de la excepción? Es decir, el texto proporcionado porThrowable.getMessage() oThrowable.getLocalizedMessage()?

Creo que no, pero parece que muchos no están de acuerdo conmigo. Entonces, ¿qué me he equivocado? Mi argumento es el siguiente.

El mensaje se creó cuando se lanzó la excepción. Por lo tanto, en el mejor de los casos, solo puede proporcionar información de muy bajo nivel, que puede ser inapropiada para informar a un usuario.ilosóficamente, usar el mensaje me parece contra todo el punto de excepciones, que es separar la detección y el inicio del manejo de errores (elthrow parte) desde la finalización del manejo y la presentación de informes (elcatch parte). El uso del mensaje significa que el mensaje debe ser bueno para informar, lo que traslada la responsabilidad de informar a la ubicación que debe ser responsable solo de la detección y el inicio. Es decir, diría que lagetMessage() parte del diseño deThrowable fue un error El mensaje no está localizado. A pesar de su nombre,getLocalizedMessage() no es muy bueno porque es posible que no sepa qué configuración regional desea usar hasta quecatch la excepción (¿el informe para ir a un registro del sistema lo leen los administradores del sistema en inglés, o es para que aparezca en una ventana emergente para el usuario francés de la GUI?). Escuché que Java 7 tiene una jerarquía de excepciones mucho mejor paraIOException, lo que le permite manejar diferentes tipos de errores de E / S en diferentescatch cláusulas, haciendo que lagetMessage() texto menos importante. Eso implica que incluso los diseñadores de Java están algo incómodos congetMessage().

No estoy preguntando si informar el seguimiento de la pila es útil. Un seguimiento de pila solo será útil para una excepción que sugiera un error. Es decir, para una excepción no verificada. Creo que, en tales circunstancias, proporcionar el detalle de bajo nivel del mensaje de excepción no solo es útil sino obligatorio. Pero mi pregunta trata con excepciones comprobadas, como archivo no encontrado.

Respuestas a la pregunta(4)

Su respuesta a la pregunta