有一个称为 validate 的方法,它作为输入接受一个实例Option
和一个Predicate
- 两个参数(是的,我知道Option
应该作为参数传递,但这是简化的现实世界场景。现在,如果Option
是空的,我需要抛出NotFoundException
。当它有一个与传递的值不匹配的值,Predicate
它应该失败,ForbiddenException
如果它有值并且它与谓词匹配,则不会发生任何事情。
所以这将是:
Option, Predicate
/\
isEmpty() / \ isDefined()
/ \
throw NFE matches(Predicate)
/ \
no / \ yes
/ \
throw FE end
我有一些解决方案,但希望潜在的回答者清楚地回答这个问题;)如果两个测试都失败,我的问题是第一个例外。如果我可以期待任何东西,我期待一个优雅的解决方案;)允许所有 vavr 存在(Either
,,,Validation
.. Try
)
其中一个想法是使用 double Option
:
Option
.of(o.getOrElseThrow(NotFoundException::new))
.filter(p)
.getOrElseThrow(ForbiddenException::new);
但这似乎有点尴尬。
这里可以找到示例项目。