gpt4 book ai didi

java - 如何返回第一个发生的异常?

转载 作者:行者123 更新时间:2023-12-03 02:42:43 25 4
gpt4 key购买 nike

有一个名为 validate 的方法,它作为输入接受 Option 的实例和 Predicate - 两个参数(是的,我知道 Option 应该作为参数传递,但这只是简化的现实场景。现在,如果 Option 为空,我需要抛出 NotFoundException。当它的值不存在时,我需要抛出 NotFoundException。匹配传递的 Predicate ,它应该失败并显示 ForbiddenException。如果它有值并且与谓词匹配,则不会发生任何事情。

所以这将是:

                Option, Predicate
/\
isEmpty() / \ isDefined()
/ \
throw NFE matches(Predicate)
/ \
no / \ yes
/ \
throw FE end

我有一些解决方案,但希望潜在的回答者能够头脑清醒地回答这个问题;)我的问题是如果两个测试都失败,就会出现第一个异常。如果我可以期待任何东西,我期待一个优雅的解决方案;)允许所有 vavr 存在(EitherValidationTry..)

其中一个想法是使用双 Option:

Option
.of(o.getOrElseThrow(NotFoundException::new))
.filter(p)
.getOrElseThrow(ForbiddenException::new);

但这似乎有点尴尬。

Here可以找到示例项目。

最佳答案

据我所知,最好的选择是创建可读的代码,在本例中这意味着使用两个 if 语句:

if (!o.isPresent()) throw new NotFoundException();
if (!p.test(o.get())) throw new ForbiddenException();

对于将来需要维护此代码的任何人来说,简单、可读且直接。

如果您仍然想以某种实用的ish风格进行操作:

o.orElseThrow(NotFoundException::new);
o.filter(p).orElseThrow(ForbiddenException::new);

使用 Java 9:

o.ifPresentOrElse(
t -> if (!p.test(t)) throw new ForbiddenException(),
() -> throw new NotFoundException());

关于java - 如何返回第一个发生的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47338562/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com