Hvorfor vavr prøv-container fangster Throwable, men ikke unntak?

stemmer
0

Jeg er ikke en ekspert i java typesystem og avvikshåndtering. Men jeg fant på, slik at vi bare skulle ta unntak, men ikke Throwable-tallet.

Her er linken: Forskjellen mellom å bruke Throwable og unntak i en prøve fangst

I Vavr bibliotek fant jeg denne kildekoden:

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);
    }
}

Ville jeg ha noen problemer i fremtiden hvis jeg vil bruke denne beholderen? Vil jeg gå glipp av noen viktige unntak som kan oppstå under gjennomføringen av 'av' funksjon?

Publisert på 02/12/2019 klokken 23:56
kilden bruker
På andre språk...                            


2 svar

stemmer
2

Throwableer en superklassen Exception, betyr catch (Throwable var)fangster Unntak også. Derfor koden i vavr er riktig - når det er noen Throwablekastet det vil bli pakket inn i en Try.Failure.

Svarte 03/12/2019 kl. 00:00
kilden bruker

stemmer
1

Merk hva svaret i den koblede innlegg sier:

Du bør generelt ikke gjøre det, kanskje bortsett fra på det aller høyeste "catch all" nivå av en tråd hvor du ønsker å logge eller på annen måte håndtere absolutt alt som kan gå galt .

Vekt mine.

Det er sannsynlig at hensikten her. Dette er en trywrapper ment å håndtere alt og la brukeren bestemme hva de ønsker å forholde seg til og hvordan. Det virker som de går for en konstruksjon som Scala Tryfor å la deg håndtere unntak uten manuelt å fange dem. For at det skal fungere og være konsekvent, alt skal håndteres på samme måte, eller du vil ha noen unntak som trenger å bli tatt, og andre som er håndtert som denne klassen hensikt.

som for

Vil jeg gå glipp av noen viktige unntak som kan oppstå under gjennomføringen av 'av' funksjon?

Du vil ikke gå glipp av dem. De skal returneres innpakket i en Try.Failure, og du kan håndtere dem deretter etter å ha mottatt feil.

Svarte 03/12/2019 kl. 00:01
kilden bruker

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