Aprovecha al máximo el encadenamiento de excepciones en Java 1.4

La encapsulación es uno de los principales beneficios de la programación orientada a objetos. Permite que un objeto dé instrucciones a otro objeto sin tener que saber cómo se llevarán a cabo esas instrucciones. El objeto java.awt.FlowLayout no le importa cómo llega el objeto javax.swing.JList a su tamaño preferido. Mientras devuelva una Dimension precisa, el "cómo" no es relevante.

Índice de Contenido
  1. La importancia de la encapsulación
    1. Una solución limpia en la programación orientada a objetos
  2. La pérdida de la excepción original
  3. Antes de Java 1.4
  4. En Java 1.4
    1. Utilizando el encadenamiento de excepciones en Java 1.4

La importancia de la encapsulación

Desafortunadamente, esta libertad de detalles que proporciona una buena encapsulación se rompe cuando empiezan a aparecer errores. Al observar el ejemplo en Listado A, podemos ver que cuando las cosas van bien, el objeto Scheduler no se preocupa por cómo llegan los objetos Task al valor que devuelven para el método getDuración. Sin embargo, cuando las cosas van mal, de repente el Scheduler se encuentra con una excepción java.lang.IOException del objeto DownloadTask, cuando el Scheduler ni siquiera sabía que habría una operación de entrada y salida.

Una solución limpia en la programación orientada a objetos

En el Listado B, podemos ver una forma limpia y orientada a objetos de resolver este problema. El objeto Task traduce la excepción a una subclase de Exception con la que el Scheduler está familiarizado. Así, en lugar de tener una instancia de Scheduler tratando de entender una excepción java.io.IOException, se crea una TaskException con la que el Scheduler sabe cómo lidiar de manera elegante.

La pérdida de la excepción original

La desventaja de esta solución es que la IOException que provocó todo el lío se pierde. Ha sido consumida por el objeto Task y reemplazada por una TaskException. Esto permite un manejo más limpio de excepciones por parte del Scheduler, pero no ayuda al desarrollador que probablemente tendrá que depurar el error más adelante.

Antes de Java 1.4

Antes de que se lanzara Java 1.4, había tres formas de lidiar con esta situación. Primero, podrías pasar la IOException hasta arriba y dejar que las capas superiores en la pila de llamadas intenten manejar una excepción de la cual no sabían nada, como se muestra en el Listado A. Segundo, podrías crear excepciones de reemplazo cada vez más generales a lo largo de la cadena, como la TaskException que se muestra en el Listado B. Tercero, podrías crear tu propia subclase de Exception para permitir la asociación de una causa Throwable con la excepción. Esta última opción está bien explicada en el artículo de Henri Yandell "Dos formas de trabajar de manera más efectiva con excepciones de Java". Dadas esas opciones, la tercera es ciertamente la mejor elección, pero comienza a desmoronarse cuando el uso de la API de otra persona te impide usar tu propia subclase de Exception en todas partes.

En Java 1.4

Afortunadamente, Java 1.4 no requiere compromisos. Ahora la clase java.lang.Throwable, la clase base de java.lang.Exception, tiene un campo miembro llamado "cause", que se puede usar para pasar los detalles importantes del problema original hasta el usuario o un archivo de registro. Este campo causa se puede establecer tanto en el constructor de Throwable como mediante un método setter proporcionado. En el primer caso, simplemente agregas un Throwable después de la cadena que se convertirá en el mensaje de la excepción en la lista de parámetros del constructor. En el segundo caso, usas el método initCause para establecer la causa en un objeto Throwable que ya ha sido construido.

Cómo trabajar con archivos de texto en Visual Basic .NET

Hay un método getter correspondiente, getCause, pero su uso no es muy común, ya que el método printStackTrace se ha modificado para descender por toda la cadena de excepciones. Esto permite que los desarrolladores utilicen buena encapsulación en sus diseños sin reducir su capacidad para depurar problemas.

Utilizando el encadenamiento de excepciones en Java 1.4

En el Listado C, podemos ver cómo se ha modificado nuestra configuración de Scheduler/Task para aprovechar la capacidad de encadenamiento de excepciones en Java 1.4. Cuando la TaskException ha subido hasta la cima, la IOException que fue la causa raíz todavía está disponible. Con el encadenamiento de excepciones en nuestras herramientas de 1.4, ya no hay excusa para un manejo descuidado de excepciones.


Más temas de Java

¿Qué temas de Java te gustaría ver? Deja un comentario a continuación o envíanos un correo electrónico.


Arquitecturas de Clustering para Aplicaciones Empresariales: Escalabilidad y Disponibilidad

En Newsmatic nos especializamos en tecnología de vanguardia, contamos con los artículos mas novedosos sobre Desarrollo, allí encontraras muchos artículos similares a Aprovecha al máximo el encadenamiento de excepciones en Java 1.4 , tenemos lo ultimo en tecnología 2023.

Artículos Relacionados

Subir

Utilizamos cookies para mejorar su experiencia de navegación, mostrarle anuncios o contenidos personalizados y analizar nuestro tráfico. Al hacer clic en “Aceptar todo” usted da su consentimiento a nuestro uso de las cookies.