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?
@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
@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.
@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ś
@jaca_66: @GotoFinal dobrze prawie z Either a @UberRam nie słuchaj bo z całego szamba jakim jest Lombok, SneakyThrows to największe pływające w nim gówno
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
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
Wydzielacie osobną prywatną metodę gdzie obsługujecie wyjątki, i np zwracacie pustą listę bądź pustego Optionala?
Dzieki
#java
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
* @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.
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
@UberRam: A sneaky throws to jeszcze większe gówno, dobre może tylko do szybkiego prototypowania czy coś. Potem jednak coś
Either
a @UberRam nie słuchaj bo z całego szamba jakim jest Lombok,SneakyThrows
to największe pływające w nim gówno@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
@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
Poza tym jestem fanem programowania funkcyjnego więc either znam i lubię, ale jestem jedyny taki w tym zespole ( ͡° ͜ʖ ͡°)
Komentarz usunięty przez autora