Por que as capturas de contêineres Try do vavr Throwable mas não exceção?

votos
0

Eu não sou um especialista em sistema de tipos de java e manipulação de exceção. Mas eu encontrei na SO que só deve capturar exceções, mas não é throwable.

Aqui está o link: Diferença entre usando Throwable e Exceção em um try catch

Na biblioteca de Vavr eu encontrei este código-fonte:

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

Eu teria quaisquer problemas no futuro, se eu vou usar esse contêiner? Será que eu perca algumas exceções críticos que podem ocorrer durante a execução da função 'de'?

Publicado 02/12/2019 em 23:56
fonte usuário
Em outras línguas...                            


2 respostas

votos
2

Throwableé uma superclasse de Exception, ou seja, catch (Throwable var)as capturas Excepções bem. Portanto, o código na vavr está correto - sempre que houver qualquer Throwablejogada estará envolvido em um Try.Failure.

Respondeu 03/12/2019 em 00:00
fonte usuário

votos
1

Observe o que a resposta no post ligados diz:

Você geralmente não deve fazer isso, exceto talvez no mais alto "catch all" nível de um segmento onde você deseja registrar ou de outra forma lidar com absolutamente tudo o que pode dar errado .

grifo meu.

Isso é provavelmente a intenção aqui. Este é um tryinvólucro destinado a lidar com tudo e deixar o usuário decidir o que eles querem lidar com e como. Parece que eles estão indo para uma construção como Scala de Trydeixá-lo lidar com exceções, sem travá-los manualmente. Para que isso funcione e ser consistente, tudo deve ser tratado da mesma forma, ou você tem algumas exceções que precisam ser capturados, e outros que são manipulados como esta classe pretende.

Quanto a

Será que eu perca algumas exceções críticos que podem ocorrer durante a execução da função 'de'?

Você não vai perder-los. Eles estão ser devolvido envolto em um Try.Failure, e você pode lidar com eles, em seguida, depois de receber o erro.

Respondeu 03/12/2019 em 00:01
fonte usuário

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