He oído que las declaraciones de anidación try-catch a menudo pueden ser un olor a código, por lo que me pregunto si esta situación es una excepción. Si no, ¿cuáles serían algunas buenas maneras de refactorizar?
Mi código tiene el siguiente aspecto:
try{
X x = blah;
otherStuff;
for (int i = 0; i < N; i++){
try{
String y = Integer.toString(i);
f(x);
}
catch(Exceptions1 e1){
System.err.println(... + y + ...);
System.exit(0);
}
}
catch(Exceptions2 e2){
...
}
Estoy usando Exceptionsaquí para indicar una captura múltiple.
e2se utiliza para detectar excepciones lanzadas al inicializar xy hacer otherStuff. Lo ideal sería que mi try-catch rodeara solo esas dos líneas, pero lo uso xdentro de mi bucle y quería evitar las advertencias de "asignación no utilizada" causadas por la inicialización a nulo fuera del try-catch.
e1no fue capturado de forma múltiple e2porque quiero proporcionar al usuario información sobre los detalles de iteración y, por lo tanto, quería un bloque catch dentro del ciclo.