Try-catch ma na celu pomóc w obsłudze wyjątków. To w jakiś sposób pomoże naszemu systemowi stać się bardziej niezawodnym: spróbuj odzyskać dane z nieoczekiwanego zdarzenia.
Podejrzewamy, że coś może się wydarzyć podczas wykonywania instrukcji i (wysyłania wiadomości), więc zostaje to uwzględnione podczas próby. Jeśli wydarzy się coś prawie nieoczekiwanego, możemy coś zrobić: zapisujemy haczyk. Nie sądzę, że zadzwoniliśmy, aby po prostu zarejestrować wyjątek. Wydaje mi się, że blok catch ma dać nam szansę na wyleczenie z błędu.
Teraz załóżmy, że usuwamy błąd, ponieważ możemy naprawić to, co jest nie tak. Ponownie spróbuj ponownie:
try{ some_instruction(); }
catch (NearlyUnexpectedException e){
fix_the_problem();
retry;
}
Szybko wpadłoby to w wieczną pętlę, ale powiedzmy, że fix_the_problem zwraca true, a następnie ponawiamy próbę. Biorąc pod uwagę, że nie ma czegoś takiego w Javie, w jaki sposób rozwiążesz ten problem? Jaki byłby twój najlepszy kod do rozwiązania tego problemu?
To jest pytanie filozoficzne, biorąc pod uwagę, że już wiem, o co pytam, nie jest bezpośrednio wspierane przez Javę.
remove()
od tego java.util.Queue
, który przeskakuje i InvalidElementException
kiedy kolejka jest pusta. Zamiast pytać, czy jest pusty, zbieram akcje w try-catch (co w przypadku współbieżności staje się obowiązkowe nawet w przypadku poprzedniego, jeśli). W takim przypadku w catch
bloku poprosiłbym o uzupełnienie kolejki o więcej elementów, a następnie ponowienie próby. Voila