Ho sentito che le dichiarazioni try-catch di annidamento possono spesso essere un odore di codice, quindi mi chiedo se questa situazione sia un'eccezione. In caso contrario, quali sarebbero i metodi migliori per il refactoring?
Il mio codice ha il seguente aspetto:
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){
...
}
Sto usando Exceptions
qui per indicare un multi-catch.
e2
è usato per catturare le eccezioni generate inizializzando x
e facendo otherStuff
. Idealmente, avrei avuto il mio try-catch surround solo su quelle due linee, ma io uso x
nel mio ciclo e volevo evitare gli avvertimenti "assegnazione inutilizzata" causati dall'inizializzazione su null all'esterno del try-catch.
e1
non è stato multi-catch con e2
perché voglio fornire all'utente informazioni sui dettagli di iterazione e quindi desideravo un blocco catch all'interno del ciclo.