Su código se lee como lo hace porque quiere hacer la parte 1 (y resolver, capturando IOException
si es necesario), haga la parte sin excepciones, y luego haga el methodThatMayThrowCustomException
. Su código literalmente no se puede escribir de otra manera y conserva la misma funcionalidad. Eso es una exageración, pero cualquier otra versión sería diferente en un sentido superficial.
Esta es no la misma:
public void whatever {
try {
methodThatMayThrowIOException();
// do more stuff here that won't throw exceptions
methodThatMayThrowCustomException();
} catch(IOException io) {
// do something with io exception here
} catch(CustomException ce) {
// do something with custom exception here
}
}
y la forma en que se ejecutaría si alguna de las excepciones son arrojados es bastante diferente. Si necesita recuperarse secuencialmente de la Parte 1, presione la Parte 2 en cualquier caso, luego continúe con la Parte 3, realmente no puede escribir su código de otra manera.
No hay nada de malo en tener dos bloques catch, aunque mezclar algo que cause una IOException con algo que arroje una CustomException podría sugerir una mezcla de preocupaciones, haciendo que su código sea difícil de entender. Pero tal como es, no es solo válido, es la única forma de hacer lo que estás haciendo.
¿Por qué debería ser una mala práctica? Parece ordenado (es decir, solo atrapas donde tienes que hacerlo). Lo único que consideraría es arrojar la excepción fuera de 'lo que sea 'porque prefiero lanzar excepciones y ver errores cuanto antes mejor (solo captar excepciones en la capa de presentación). – helios
Esto no se puede responder sin conocer más detalles. Es un buen estilo si se puede recuperar la IOException, es un estilo muy malo si no puede. –
La excepción IO fue solo un ejemplo. Me preguntaba sobre múltiples intentos en un método. – Geo