gpt4 book ai didi

java - rx-java2 flatMap 中的空处理

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

docs 中所述RxJava 2.x 不再接受空值。因此,下面两行都以 onError 调用终止也就不足为奇了:

Observable.fromCallable(() -> null);
Observable.just(1).flatMap(i -> Observable.error(new RuntimeException()));

不清楚的是为什么

Observable.just(1).flatMap(i -> Observable.fromCallable(() -> null))

成功终止并且没有发出任何项目。预期它的行为方式与 Observable.error

相同是合理的

我可以在rx-java 2.1.2的源代码中看到

 public final <R> Observable<R> flatMap(...) {
if (this instanceof ScalarCallable) {
@SuppressWarnings("unchecked")
T v = ((ScalarCallable<T>)this).call();
if (v == null) {
return empty();
}
...
}

这解释了为什么它会在代码方面发生,但我仍然有两个问题:

1) 这是预期行为还是错误?

2)如果有意这样做,有什么原因吗?

最佳答案

这是 Observable.fromCallable 的一个错误,将通过 PR 5517 进行修复。 .

如果由于某种原因您无法避免此设置中的 null 返回,则可以应用 hide() 来解决此错误:

Observable.just(1).flatMap(i -> Observable.fromCallable(() -> null).hide())

或者帮助 RxJava 抛出:

Observable.just(1)
.flatMap(i -> Observable.fromCallable(() ->
java.util.Objects.requireNonNull(apiReturningNull()))
)

关于java - rx-java2 flatMap 中的空处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45304226/

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