El manejo de excepciones es una de las tareas más comunes en Java, pero no necesariamente una de las más sencillas. Es aún uno de los tópicos más discutidos en equipos de trabajo, y existen buenas prácticas para el manejo de excepciones y también errores muy comunes.

A continuación algunas cosas que se deben evitar cuando se maneja excepciones en la aplicación.

Error 1: Especificar java.lang.Exception o java.lang.Throwable

Se debe especificar o manejar una excepción del tipo checked. Pero las excepciones del tipo checked no son las únicas que se puede especificar. Se puede utilizar cualquier subclase de java.lang.Throwable en una clausula throws. Por tanto, en lugar de especificar las dos excepciones diferentes que arroja el siguiente fragmento de código, puede usar la excepción java.lang.Exception en la clausula throws.

Pero eso no significa que se deba hacer. Especificar Exception o Throwable hace que sea casi imposible manejarlos adecuadamente al llamar a su método.

La única información que recibe la persona que llama a su método es que algo podría salir mal. Pero no comparte ninguna información sobre el tipo de eventos excepcionales que pueda ocurrir. Está ocultando esta información detrás de una cláusula throws no especificada.

Utilice clausulas especificas

Por lo tanto, es mucho mejor especificar las clases de excepción más específicas, incluso si tiene que usar varias de ellas. Eso le dice a la persona que llama a su método qué excepciones deben ser manejados. También le permite actualizar la cláusulas throws cuando su método arroja una excepción adicional. De modo que sus clientes son conscientes del cambio e incluso obtienen un error si cambian su cláusula throws. Es mucho más fácil de encontrar y manejar que una excepción que solo aparece cuando ejecuta un caso de prueba particular.

Error 2: Manejo de excepciones no específicas

La severidad de este error depende del tipo de software que esta implementando y donde realiza la captura de la excepción. Podría estar bien capturar una excepción java.lang.Exception en el método principal de su aplicación Java SE. Pero debería preferir detectar excepciones específicas, si está implementando una biblioteca o si está trabajando en capas más profundas de su aplicación.

Eso proporciona varios beneficios. Le permite manejar cada clase de excepción de manera diferente y le impide detectar excepciones que no esperaba.

Pero tenga en cuenta que el primer bloque catch que maneja la clase de excepción o una de las super clases la atrapará. Por lo tanto, asegúrese de atrapar la clase más específica primero. De lo contrario, sus IDEs mostrarán un mensaje de error o de advertencia que le informará acerca de un bloque de código que no se ejecutara.

Error 3: Uso de excepciones para manejar el flujo

El utilizar excepciones para controlar el flujo de la aplicación es considerado un anti-patrón por dos razones principales:

  • Estas básicamente trabajan como una sentencia Go To por que esta cancela la ejecución de un bloque de código y salta al primer bloque catch que maneja la excepción. Esto hace que el código sea difícil de leer.
  • Esta no es una estructura de control eficiente en Java. Como su nombre lo indica, sólo lo puedes utilizar para el manejo de excepciones, y la JVM no optimiza esto de la misma manera que otras secciones de código.

Por lo tanto, mejor utilice las condiciones adecuadas para salir de los bucles o sentencias condicionales para decidir qué bloques de código se deben ejecutar.

Error 4: Eliminar la causa original de la Excepción

A veces puede desear ajustar una excepción en una diferente. Tal vez el equipo decidió usar una excepción comercial personalizada con códigos de error y un manejo unificado. No hay nada de malo en este enfoque siempre que no elimine la causa.

Cuando instancia una nueva excepción, siempre debe establecer la excepción atrapada como su causa. De lo contrario, perderá el mensaje y el seguimiento de la pila que describe el evento excepcional que causó su excepción. La clase Exception y todas las sub clases proporcionan varios métodos de constructor que aceptan la excepción original como parámetros y la configuran como causa.

Error 5: Agregar transformaciones de excepciones innecesarias

Como se menciono anteriormente, puede ser útil ajustar las excepciones a las personalizadas siempre que establezca la excepción original como su causa. Pero algunos arquitectos se exceden y presenta una clase de excepción personalizada para cada capa arquitectónica. Entonces, atrapan una excepción en la capa de persistencia y la envuelven en una MyPersistenceException. La capa de negocio lo atrapa y lo envuelve en una MyBusinessException y esto continúa hasta que llega a la capa API o se maneja.

Es fácil ver que estas clases de excepciones adicionales no proporcionan ningún beneficio. Simplemente introducen capas adicionales que envuelven la excepción.

Asegúrese de agregar información

Solo piense en el código que necesita para manejar la excepción o usted mismo cuando necesite encontrar el problema que causó la excepción. Primero debe buscar en varias capas de excepciones para encontrar la causa original. Y hasta hoy, nunca he visto una aplicación que utilizara este enfoque y agregué información útil con cada capa de excepción. O bien generalizan el mensaje de error y el código, o bien proporcionan información redundante.

Por lo tanto, tenga cuidado con la cantidad de clases de excepciones personalizadas que introduce. Siempre debe preguntarse si la nueva clase de excepción proporciona información adicional u otros beneficios. En la mayoría de los casos, no necesita más de una capa de excepciones personalizadas para lograr eso.

Más sobre las excepciones Java

Como ha visto, hay varios errores comunes que debe evitar cuando maneja excepciones Java. Eso le ayuda a evitar errores comunes e implementar aplicaciones que son fáciles de mantener y monitorear en producción.

A fin de profundizar sobre el conocimiento del manejo de excepciones en Java, también puede revisar el artículo sobre Mejoras Prácticas para el Manejo de Excepcions.


Este artículo se encuentra basado en Common Mistakes You Should Avoid When Handling Java Exceptions

Java: Errores comunes que se deben evitar al manejar Excepciones
Si te gusto, comparte ...Email this to someone
email
Share on Facebook
Facebook
Tweet about this on Twitter
Twitter
Share on LinkedIn
Linkedin
Share on Google+
Google+
Etiquetado en:    

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Facebook
A %d blogueros les gusta esto: