Warum funktioniert Vavr das Try Container Fänge Throwable aber nicht Ausnahme?

stimmen
0

Ich bin kein Experte in Java Typsystem und Ausnahmebehandlung. Aber ich in SO festgestellt, dass wir nur Ausnahmen fangen sollten aber nicht throwable ist.

Hier ist der Link: Unterschied zwischen der Verwendung von Throwable und Ausnahme in einem Try - Catch

In Vavr der Bibliothek fand ich diesen Quellcode:

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

Würde ich alle Probleme in Zukunft haben, wenn ich diesen Behälter verwenden? Will ich vermisse einige kritische Ausnahmen, die während der Ausführung von ‚der‘ Funktion können auftreten?

Veröffentlicht am 02/12/2019 um 23:56
quelle vom benutzer
In anderen Sprachen...                            


2 antworten

stimmen
2

Throwableist eine übergeordnete Klasse von Exception, was bedeutet , catch (Throwable var)auch Fänge Ausnahmen. Daher ist der Code in Vavr ist richtig - wenn sich die wird Throwablegeworfen wird es in einem gewickelt werden Try.Failure.

Beantwortet am 03/12/2019 um 00:00
quelle vom benutzer

stimmen
1

Beachten Sie, was die Antwort in den verlinkten Beitrag sagt:

Sie sollten in der Regel nicht tun, außer vielleicht auf allerhöchstem Niveau eines Fadens „alle fangen“ , wo Sie oder protokollieren wollen anders behandeln absolut alles, was schief gehen kann .

Hervorhebung von mir.

Das ist wahrscheinlich die hier Absicht. Dies ist ein tryWrapper zu handhaben soll alles und lassen den Benutzer entscheiden , was sie mit und wie umgehen wollen. Es scheint , sie für ein Konstrukt wie Scala geht Trydu Ausnahmen zu lassen behandeln , ohne sie manuell zu kontrollieren. Dafür zu arbeiten und konsequent sein, alles soll die gleiche Art und Weise behandelt werden, oder Sie würden einige Ausnahmen haben , um gefangen zu werden, und andere , die behandelt werden , da diese Klasse beabsichtigt.

Wie für

Will ich vermisse einige kritische Ausnahmen, die während der Ausführung von ‚der‘ Funktion können auftreten?

Sie werden sie nicht verpassen. Sie sind zurück in eine eingewickelt werden Try.Failure, und man kann sie dann behandeln , nachdem der Fehler empfangen.

Beantwortet am 03/12/2019 um 00:01
quelle vom benutzer

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