Мы используем Vavr в нашем проекте, чтобы упростить обработку исключений. Я всегда проверяю, чтобы метод, который возвращает Try
, никогда не мог ничего выдать, например:
public Try<Result> someSafeMethod() {
return Try.of(() -> someService.generateId())
.map(someOtherService::getValueForId)
.map(mappingService::mapToResult);
}
, но некоторые из моих коллег реализовали бы его так:
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
, не должен выбрасывать, но он утверждает, что:
Try - это тип контейнера monadi c, который представляет вычисление, которое может привести к исключению или вернуть успешно вычисленное значение .
Я слишком строг? Представьте, что вы используете API, где все методы возвращают Try
, не будет ли плохо, если они все еще выдают?