Ale*_*rov 2 java exception vavr
我不是java类型系统和异常处理方面的专家。但我发现我们应该只捕获异常而不是可抛出的异常。
这是链接: Difference Between using Throwable and Exception in a try catch
在 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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果我将来使用这个容器,会有什么问题吗?我会错过执行“of”函数期间可能发生的一些关键异常吗?
Throwable
是 的超类Exception
,意味着catch (Throwable var)
也捕获异常。因此 vavr 中的代码是正确的 - 每当抛出任何Throwable
异常时,它都会被包装在Try.Failure
.
请注意链接帖子中的答案所说的内容:
通常,您不应该这样做,除非在线程的最高“捕获所有”级别,您想要记录或以其他方式处理绝对可能出错的所有内容。
强调我的。
这可能就是这里的意图。这是一个try
包装器,旨在处理所有事情并让用户决定他们想要处理什么以及如何处理。看起来他们正在寻求像 Scala 这样的构造Try
来让您处理异常而无需手动捕获它们。为了使其工作并保持一致,一切都应该以相同的方式处理,否则您将需要捕获一些异常,而其他异常则按照此类的意图进行处理。
至于
我会错过执行“of”函数期间可能发生的一些关键异常吗?
你不会错过他们的。它们被包装在 a 中返回Try.Failure
,您可以在收到错误后处理它们。