Trzy metody generujące wyjątek w try-catch

0

Cześć, jak dobrze rozumiem, to jeśli w bloku try program napotka wyjątek, od razu przechodzi do bloku catch. Ja natomiast potrzebuję rozwiązać sytuację, w której mam trzy metody generujące taki sam wyjątek.

Jak dobrze rozumiem, nie mogę zrobić tego w jednym bloku try, ponieważ wykona się tylko pierwsza metoda. Muszę więc zrobić 3 bloki try-catch?

To nie zadziała

 
try{
    metodaGenerujacaWyjatek1();
    metodaGenerujacaWyjatek2();
    metodaGenerujacaWyjatek3();
} catch(NullPointerException ex){
}
 

Nie ma lepszego rozwiązania niż to?

 
try{
    metodaGenerujacaWyjatek1();
} catch(NullPointerException ex){
}
try{
    metodaGenerujacaWyjatek2();
} catch(NullPointerException ex){
}
try{
    metodaGenerujacaWyjatek3();
} catch(NullPointerException ex){
}
 
0

Nie ma, ponieważ wyjątek sugeruje że stało się coś, co nie powinno się stać. Jeżeli mimo że z metody 1 wyleci wyjątek, chcesz wykonać metodę 2, to znaczy że działasz w jednym z 2 wariantów:

  1. Wiesz jak naprawić sytuację i sprowadzić aplikację do prawidłowego stanu. Bardzo rzadki przypadek i rzadko się go widuje.
  2. Metoda 1 była niekrytyczna i nie mogła zepsuć stanu. W tym wypadku jednak nastąpił pewnie jakiś błąd projektowy.

Wyobraź sobie np. sytuację gdy chcesz otworzyć jakiś obrazek, zmienić go i zapisać. 3 metody. Każda zależy od poprzedniej. Jeżeli nie otworzysz obrazka, to nie możesz nic w nim zmienić. Jeżeli dostajesz błąd z brakiem pliku, to wyjątkową sytuacją jest tylko wtedy, gdy byłeś pewny że ten obrazek tam jest. Nie da się na to zareagować poprawnie ani naprawić sytuacji. Jeżeli wiesz że tego obrazka tam może nie być, ale za to będzie pewnie w katalogu X, to metoda1 powinna sprawdzić czy obrazek tam jest, jak nie, to sprawdzić katalog X. W skrócie, robisz wszystko co możesz żeby zapobiec katastrofie, a nie przygotowujesz planu awaryjnego katastrofy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1