rx-java2 flatMap中的空处理

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

正如RXJava2.x中所解释的,它不再接受空值。因此,以下两行都以调用的
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()))
    )