mam ten kod:Jak uniknąć powielania skomplikowanych bloków 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);
}
Teraz trzeba mieć wszystkie te bloki catch w innej podobnej funkcji. Jaki jest najlepszy sposób na uniknięcie powielania?
Należy zauważyć, że kod wewnątrz dwóch bloków try nie jest bardzo podobny.
Również nie mogę umieścić zestawu chwytów wyżej.
Uwaga, wolałbym uniknąć:
try {
do_stuff();
return do_more_stuff();
} catch (Exception e) {
handle_exception_via_rtti(e);
}
dlaczego chcesz uniknąć wersji rtti? – clamp
Gdy dpb mówi "Jeśli twój kod po prostu łapie wyjątek, a doWWWP i do_więcej razy później dodają dodatkowe sprawdzone wyjątki, prawdopodobnie nigdy nie dowiesz się o zmianie i tym, że twój kod może być teraz nieprawidłowy." – mxcl
Osobiście chciałbym, aby Twoja metoda wyrzuciła oryginalne wyjątki. Nie robi się zbyt wiele z blokami catch, aby "obsłużyć" wszystko poza pakowaniem w wyjątek CustomException. Jaką wartość ma to dodanie? – duffymo