tengo este código:Cómo evitar la duplicación de complicados bloques catch
try {
do_stuff();
return do_more_stuff();
} catch (UnsupportedEncodingException e) {
throw CustomException.programmer_error(e);
} catch (ProtocolException e) {
throw CustomException.programmer_error(e);
} catch (MalformedURLException e) {
throw CustomException.programmer_error(e);
} catch (SocketTimeoutException e) {
throw new CustomException(e);
} catch (IOException e) {
throw CustomException.unexpected_error(e);
}
ahora necesita tener todos esos bloques de captura en otra función similar. ¿Cuál es la mejor manera de evitar la duplicación aquí?
Tenga en cuenta que el código dentro de los dos bloques de prueba no es muy similar.
También realmente no puedo poner el conjunto de las capturas más arriba.
Nota, yo preferiría evitar:
try {
do_stuff();
return do_more_stuff();
} catch (Exception e) {
handle_exception_via_rtti(e);
}
¿por qué quieres evitar la versión rtti? – clamp
Como dpb dice "Si su código simplemente detecta Excepción, y do_stuff y do_more_stuff luego agregan excepciones comprobadas adicionales, probablemente nunca sabrá sobre el cambio y el hecho de que su código podría estar equivocado". – mxcl
Personalmente, me gustaría que tu método arrojara las excepciones originales. No hace mucho con sus bloques catch para 'manejar' nada excepto envolver en una CustomException. ¿Qué valor tiene esa suma? – duffymo