Почему vavr Попытаемся контейнер ловит Throwable, но не Exception?

голоса
0

Я не эксперт в системе типа Java и обработки исключений. Но я нашел в так что мы должны поймать только исключения, но не Throwable-ые годы.

Вот ссылка: Разница между использованием метательного и исключениями в попытке поймать

В библиотеке Vavr я нашла этот исходный код:

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

Будет ли у меня есть какие-либо вопросы, в будущем, если я буду использовать этот контейнер? Буду ли я пропустить некоторые важные исключения, которые могут возникнуть во время выполнения функции «в»?

Задан 02/12/2019 в 23:56
источник пользователем
На других языках...                            


2 ответов

голоса
2

Throwableэто суперкласс Exception, то есть catch (Throwable var)отлавливает исключения , а также. Поэтому код в vavr правильно - каждый раз , когда есть какой - либо Throwableвыброшен он будет обернут в Try.Failure.

Ответил 03/12/2019 в 00:00
источник пользователем

голоса
1

Обратите внимание , что ответ в связанном посте говорится:

Вы должны , как правило , не делать это, за исключением , возможно , на самом высоком «поймать всех» уровень в потоке , в котором вы хотите войти или иным образом обрабатывать абсолютно все , что может пойти не так .

Упор мое.

Это, скорее всего , намерение здесь. Это tryобертка означала для обработки всех и позволить пользователю решить , что они хотят иметь дело и как. Кажется , что они собираются для конструкции , как в Scala , Tryчтобы позволить вам обрабатывать исключения , не вручную их ловить. Для того , чтобы работать и быть последовательным, все должны быть обработаны таким же образом, или вы хотите иметь некоторые исключения , требующие , чтобы быть пойманным, и другие, которые обрабатываются , как этот класс намерен.

Что касается

Буду ли я пропустить некоторые важные исключения, которые могут возникнуть во время выполнения функции «в»?

Вы не пропустите их. Они возвращаются , завернутые в Try.Failure, и вы можете справиться с ними , то после получения ошибки.

Ответил 03/12/2019 в 00:01
источник пользователем

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