Java 当布尔单声道为某个值时,一种不太冗长的抛出方式
我有很多例子,布尔变量开始一个反应序列,如果它们是某个值(大部分为false),则应该抛出一个异常,并破坏序列。比如说Java 当布尔单声道为某个值时,一种不太冗长的抛出方式,java,spring,reactive-programming,project-reactor,Java,Spring,Reactive Programming,Project Reactor,我有很多例子,布尔变量开始一个反应序列,如果它们是某个值(大部分为false),则应该抛出一个异常,并破坏序列。比如说 Mono.just(foo.isValid()) .flatMap(b -> b ? Mono.empty() : Mono.error(new FooNotValidException(foo.detail1, foo.detail2))) .then(bar.doProcess()) .flatMap(b -> b ? Mono.empt
Mono.just(foo.isValid())
.flatMap(b -> b ? Mono.empty() : Mono.error(new FooNotValidException(foo.detail1, foo.detail2)))
.then(bar.doProcess())
.flatMap(b -> b ? Mono.empty() : Mono.error(new BarProcessingNotSuccessful(bar.detail1, bar.detail2)))
....
这里,如果foo
无效,则不会执行bar
,并且序列被破坏并出现详细异常,如果bar
处理失败,则情况相同
这是我设法做到的最短的,但是有很多重复,所以我想知道这是否可以减少冗长 根据Borises注释,我将上述代码示例重写为
Mono.fromRunnable(foo::isValidOrThrow) // may throw FooNotValidException
.then(Mono.fromRunnable(bar::doProcessOrThrow)) // may throw BarProcesingNotSuccessful
....
这看起来好多了。您似乎在使用
boolean
来表示操作和抛出成功。我会删除所有这些逻辑,然后加入isValid
和doProcess
,然后可能使用onErrorMap
重新映射异常。