Wpis z mikrobloga

Znacie jakiś fajny sposób na eliminowanie w Javie try&catch? W sensie aby jakoś fajnie to uprościć? (nie mam na myśli dodawanie klauzuli throws w metodzie)

Wydzielacie osobną prywatną metodę gdzie obsługujecie wyjątki, i np zwracacie pustą listę bądź pustego Optionala?

Dzieki

#java
  • 12
  • Odpowiedz
@jaca_66: Popularne rozwiązanie to właśnie jakiś Either gdzie wtedy można na tym map robić i obsłużyć trzeba.
Trochę proścej to jakież typowe reaktywne Mono gdzie masz już tylko typ a exception jest bardziej ukryte i trzeba już samemu pamiętać by gdzieś niżej obsłużyć już finalnie.

Optional też ujdzie jak masz możliwość obsłużenia tego wyjątku poprawnie - co nie zawsze jest możliwe. Bo może to od kodu wywołującego twoją metodą zależy
  • Odpowiedz
@jaca_66: W przypadkach kiedy jestes w 100% pewien ze nie rzuci wyjatkiem (bo np. uzyjesz kodowanie UTF-8, ktore zawsze masz w swoim jre):
* @SneakyThrows z Lomboka
* utworzyc sobie metode pomocnicza ktora opakuje exception w RuntimeException (kiedys byla taka libka o ile dobrze pamietam do tego).

W przypadku procesowania jakichs wynikow z innego systemu to obsluga Optionala (orElse lub orElseGet), zwracanie pustych kolekcji, badz implementacja Null Object pattern.
  • Odpowiedz
@jaca_66: To co obaj panowie mówią:

albo zamieniasz na wartość (zależy od konkretnej metody i typów danych) - Optionale, Eithery, Null objecty

albo wrapujesz w RuntimeException i nie musisz deklarować throws
  • Odpowiedz
@scriptkitty: @UberRam: wrapowanie w runtime exception to bardziej anty-pattern, potem 10 warstw wyżej coś wywala z dupy i szukasz po dokumentacji. Oczywiście jak zawsze, są wyjątki, ale warto napisać że to jednak nie jest coś co powinno się domyślnie robić. Nawet trudno mi pomyśleć o dobrym wyjątku.

@UberRam: A sneaky throws to jeszcze większe gówno, dobre może tylko do szybkiego prototypowania czy coś. Potem jednak coś
  • Odpowiedz
wrapowanie w runtime exception to bardziej anty-pattern,


@GotoFinal: Niekoniecznie. JDK wyrzuca wyjątki w bezsensownych sytuacjach czasem, na przykład przy pobieraniu wbudowanego encodingu. Albo gdy jakikolwiek błąd połączenia z bazą ma mi przerwać transakcję, runtime exception jest obsługiwany przez exception mappera (u mnie w dropwizardzie) odpowiednio logowany i zdarza się prawie nigdy to nie ma sensu wszędzie przepychać SQLException.

W praktyce u nas (kilkadziesiąt mikroserwisów) używamy tego non-stop i nigdy nie
  • Odpowiedz
Albo gdy jakikolwiek błąd połączenia z bazą ma mi przerwać transakcję, runtime exception jest obsługiwany przez exception mappera


@scriptkitty: Jezus, ale wy wiecie że Java to nie tylko spring? Może i popularna technologia, ale pisanie odpowiedzi zakładając że każdy na pewno używa tego samego to trochę smród.

A tak to jak napisałem, są miejsca gdzie jest to ok, ale to nie jest nic co bym zaproponował gdy ktoś pyta mnie co zrobić z wyjątkiem: w weź #!$%@? owrapowany w coś nowego.
A tak to już robienie bezpośrednio RuntimeException to imho duży rak, przynajmniej użyj jakiegoś własnego typu co leci
  • Odpowiedz