Considere algunos códigos que pueden arrojar una excepción marcada (una excepción de tipo Exception
). Su código catch
es la excepción, por supuesto. No solo se traga la excepción tampoco, 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 de GUI.¿Debería informar el texto del mensaje de las excepciones?
En caso de que el texto que informe al usuario incluya el texto del mensaje de la excepción. Es decir, el texto proporcionado por Throwable.getMessage()
o Throwable.getLocalizedMessage()
?
Creo que no, pero parece que muchos no están de acuerdo conmigo. Entonces, ¿qué tengo mal? Mi argumento es el siguiente.
- El mensaje se creó cuando se produjo la excepción. Por lo tanto, en el mejor de los casos puede proporcionar información de muy bajo nivel, lo que puede ser inapropiado para informar a un usuario.
- Filosóficamente, usar el mensaje me parece contra todo el punto de excepciones, que es separar la detección y el inicio de la gestión de errores (la parte
throw
) desde la finalización de la gestión y la creación de informes (la partecatch
). Usar el mensaje significa que el mensaje debe ser bueno para informar, lo que mueve la responsabilidad de informar a la ubicación que debería ser responsable únicamente de la detección e iniciación. Es decir, yo diría que la partegetMessage()
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 utilizar hasta quecatch
la excepción (es el informe para ir a un registro del sistema leído por los administradores del sistema inglés, o es para aparecer en un ventana para el usuario francés de la GUI?). - Me enteré de que Java 7 tiene una jerarquía de excepción muy mejorada para
IOException
, lo que le permite manejar diferentes tipos de errores de E/S en las diferentes cláusulascatch
, por lo que el textogetMessage()
es menos importante. Eso implica que incluso los diseñadores de Java son algo incómodos congetMessage()
.
No estoy preguntando si la pila de informes-trace es útil. Un seguimiento de pila solo será útil para una excepción que sugiera un error. Es decir, para una excepción sin marcar. Creo que en tales circunstancias, proporcionar los detalles de bajo nivel del mensaje de excepción no es solo útil sino obligatorio. Pero mi pregunta se refiere a las excepciones comprobadas, como el archivo no encontrado.
Una pregunta relacionada: http://stackoverflow.com/questions/2790528/extracting-user-friendly-exception-details-in-java – Raedwald
No hay 1 medida adecuada. depende de "¿Quién es tu público objetivo?" – Pacerier