java折叠以返回不同的值
我有一个Vavr,看起来像这样:
Either<DomainError, Boolean> maybePendingPayment = ...
我想折叠此响应以返回<;域错误,可选>
return maybePendingPayment.fold(domainError -> domainError, pendingPayment ? GenericType.builder().build() : Optional.empty())
但看起来我做不到,因为fold希望我返回相同的类型:
[ERROR] lower bounds: io.vavr.control.Either<xxx.yyy.DomainError,java.util.Optional<xxx.yyy.GenericType>>,java.lang.Object
[ERROR] lower bounds: java.util.Optional<T>,java.util.Optional<T>,xxx.yyy.DomainError
除了用if-else检查左右两侧之外,我还有什么办法可以用更奇特的方式来做这件事吗
# 1 楼答案
将
fold
应用于Either
将(正如名称所示)折叠它并应用left或right函数,返回应用函数的结果通过下面的例子,我试图更清楚地说明发生了什么:
如您所见,我为函数返回类型选择了
Optional<Object>
,并将fold的左函数包装为可选。当打开Either
时,返回类型将是Optional<DomainError>
或正确函数的结果(在我的示例中是String
或Optional.empty
)。如果您试图返回的函数有一个通用的超类型(介于GenericType
和DomainError
),那么您可以选择此超类型作为函数的返回类型,而不是Object