Dlaczego kontenerów Spróbuj wyławia vavr za Throwable, ale nie wyjątek?

głosy
0

Nie jestem ekspertem w systemie typu Java i obsługi wyjątków. Ale uważam, że w tak, że powinniśmy złapać tylko wyjątki, ale nie Throwable jest.

Oto link: Różnica między używaniem Throwable i wyjątek w try catch

W bibliotece Vavr za znalazłem ten kod źródłowy:

public interface Try<T> extends Value<T>, Serializable {
long serialVersionUID = 1L;

static <T> Try<T> of(CheckedFunction0<? extends T> supplier) {
    Objects.requireNonNull(supplier, supplier is null);

    try {
        return new Try.Success(supplier.apply());
    } catch (Throwable var2) {
        return new Try.Failure(var2);
    }
}

Czy mam żadnych problemów w przyszłości, jeśli będę korzystać z tego pojemnika? Będę tęsknić krytyczne wyjątki, które mogą wystąpić podczas wykonywania „” z funkcją?

Utwórz 02/12/2019 o 23:56
źródło użytkownik
W innych językach...                            


2 odpowiedzi

głosy
2

Throwablejest nadklasą Exception, co oznacza catch (Throwable var)połów wyjątki, jak również. W związku z tym kod w vavr jest poprawny - gdy istnieje jakiekolwiek Throwablewyrzucane będzie owinięta w Try.Failure.

Odpowiedział 03/12/2019 o 00:00
źródło użytkownik

głosy
1

Uwaga jaka odpowiedź w połączonej postu mówi:

Nie powinno się na ogół to zrobić, z wyjątkiem być może na najwyższym „catch all” poziom wątku, w którym chcesz się zalogować lub inaczej obsłużyć absolutnie wszystko, co może pójść źle .

Kopalnia nacisk.

Że jest tu prawdopodobnie intencją. Jest to trywrapper przeznaczona do obsługi wszystko i pozwolić użytkownikowi zdecydować, co chcą zajmować iw jaki sposób. Wygląda na to, że będziemy dla konstruktu jak Scala Tryaby obsłużyć wyjątki bez konieczności ręcznego ich wzrok. Do tego, aby pracować i być spójne, wszystko powinno być traktowane w ten sam sposób, czy chcesz mieć pewne wyjątki, która chciałaby zostać złapany i innych, które są traktowane jako ta klasa zamierza.

Co się tyczy

Będę tęsknić krytyczne wyjątki, które mogą wystąpić podczas wykonywania „” z funkcją?

Nie przegap ich. Są one zostać zwrócone zawinięte w Try.Failure, można obsługiwać je następnie po otrzymaniu błąd.

Odpowiedział 03/12/2019 o 00:01
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more