Tengo una función que realiza un bucle mientras se hace algo que podría arrojar una excepción. Se parece a esto:Lanzar una lista vinculada de excepciones en Java
public void myFunction() throws MyException {
while(stuff) {
try {
DoSomething() // throws an exception
}
catch (Exception ex) {
throw new MyException(some, stuff, of, mine, ex);
}
}
}
El error que causa la excepción es recuperable. Puede ser algo así como un error de SQL en una única declaración de actualización donde el ciclo while ejecuta una serie de instrucciones de actualización. O un error de análisis en una sola pieza de datos, donde el ciclo procesa múltiples piezas de datos. Necesito pasar la excepción más arriba de la cadena para que la parte de la GUI del programa pueda procesarla, manejarla y transmitir el error al usuario. Pero no quiero matar el bucle en esta función en particular. Las otras cosas que está haciendo podrían no ser inválidas. El error que causó la excepción podría no ser fatal para la función.
Así que mi pregunta es la siguiente: ¿Es una práctica aceptable construir listas vinculadas de excepciones personalizadas (donde cada excepción es un nodo y la excepción arroja el encabezado de la lista) y luego arrojar el encabezado de la lista (en su caso) una vez que termina el ciclo?
¿Alguien ha visto esto hecho? ¿Alguien puede pensar en algún problema potencial al hacer esto? ¿Puede alguien pensar en otras formas mejores de manejar el problema raíz: la necesidad de pasar múltiples excepciones no relacionadas sin salir de la función hasta que se complete?
Aquí hay un ejemplo de cómo la vinculación y un tiro podrían ser implementadas de manera muy sencilla:
public void myFunction() throws MyException {
MyException head = null;
while(stuff) {
try {
DoSomething() // throws an exception
}
catch (Exception ex) {
MyException tmp = new MyException(some, stuff, of, mine, ex);
tmp.next(head);
head = tmp;
}
}
if(head != null)
throw head;
}
Por cierto. Más allá usas una lista vinculada aquí o no. Hay una clase 'java.util.LinkedList' lista para usar, por lo que no tiene que programar su funcionamiento dentro de los objetos de su artículo (en este caso,' MyException'). – helios
Soy consciente de ello. No pensé que podrías usarlo en este caso, porque la lista debe ser lanzada y LinkedList no es un tema desechable. –