rx-java2 flatMap中的空处理
正如RXJava2.x中所解释的,它不再接受空值。因此,以下两行都以调用的rx-java2 flatMap中的空处理,java,rx-java,rx-java2,Java,Rx Java,Rx Java2,正如RXJava2.x中所解释的,它不再接受空值。因此,以下两行都以调用的onError终止也就不足为奇了: Observable.fromCallable(() -> null); Observable.just(1).flatMap(i -> Observable.error(new RuntimeException())); 原因不明 Observable.just(1).flatMap(i -> Observable.fromCallable(() -> nul
onError
终止也就不足为奇了:
Observable.fromCallable(() -> null);
Observable.just(1).flatMap(i -> Observable.error(new RuntimeException()));
原因不明
Observable.just(1).flatMap(i -> Observable.fromCallable(() -> null))
以成功结束,并且未发出任何项。可以合理预期,它的行为方式与可观察到的行为方式相同。错误
我可以在RXJava2.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();
}
...
}
公共最终可观测平面图(…){
如果(此实例为ScalarCallable){
@抑制警告(“未选中”)
tV=((ScalarCallable)this.call();
如果(v==null){
返回空();
}
...
}
这就解释了为什么它会发生在代码方面,但我仍然有两个问题:
1) 这是一个预期的行为还是一个bug
2) 如果有意的话,这有什么原因吗?这是一个带有可观察的
的bug。fromCallable
将用修复
如果由于某种原因,您无法在此设置中避免空返回,则可以应用hide()
来解决此错误:
Observable.just(1).flatMap(i -> Observable.fromCallable(() -> null).hide())
或帮助RxJava抛出:
Observable.just(1)
.flatMap(i -> Observable.fromCallable(() ->
java.util.Objects.requireNonNull(apiReturningNull()))
)