我们在项目中使用Vavr以简化异常处理。我总是确保返回Try
的方法永远不会抛出任何东西,就像这样:
Try
但是我的一些同事会这样实现:
public Try<Result> someSafeMethod() {
return Try.of(() -> someService.generateId())
.map(someOtherService::getValueForId)
.map(mappingService::mapToResult);
}
争论如果ID的生成有问题,他们宁愿引发异常,而不是返回的public Try<Result> someSafeMethod() {
String generatedId = someService.generateId(); // <- Might throw an Exception that is not caught by the Try clause
return Try.of(() -> someOtherService.getValueForId(generatedId))
.map(mappingService::mapToResult);
}
失败。
该文档没有禁止返回Try
的方法,但是它声明:
Try是一种Monadic容器类型,它表示可能导致异常,或者返回成功计算出的值的计算。
我太严格了吗?想象一下,您将使用一个API,其中所有方法都返回一个Try
,当它们仍然抛出时,这还不错吗?