首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >rx-java2 flatMap中的Null处理

rx-java2 flatMap中的Null处理
EN

Stack Overflow用户
提问于 2017-07-25 21:03:58
回答 1查看 252关注 0票数 0

正如在docs中所解释的,RxJava 2.x不再接受空值。因此,以下两行代码都以onError结束也就不足为奇了:

代码语言:javascript
复制
Observable.fromCallable(() -> null);
Observable.just(1).flatMap(i -> Observable.error(new RuntimeException()));

目前尚不清楚的是为什么

代码语言:javascript
复制
Observable.just(1).flatMap(i -> Observable.fromCallable(() -> null))

成功终止,且不发出任何项。因为它的行为方式与Observable.error相同,所以它看起来是合理的

我可以在rx-java2.1.2的源代码中看到

代码语言:javascript
复制
 public final <R> Observable<R> flatMap(...) {
    if (this instanceof ScalarCallable) {
        @SuppressWarnings("unchecked")
        T v = ((ScalarCallable<T>)this).call();
        if (v == null) {
            return empty();
        }
        ...
 }

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

1)这是有意为之的行为还是bug?

2)如果是故意的,有没有原因?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-25 22:03:41

这是Observable.fromCallable的一个错误,将使用PR 5517修复。

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

代码语言:javascript
复制
Observable.just(1).flatMap(i -> Observable.fromCallable(() -> null).hide())

或者帮助RxJava抛出:

代码语言:javascript
复制
Observable.just(1)
    .flatMap(i -> Observable.fromCallable(() -> 
         java.util.Objects.requireNonNull(apiReturningNull()))
    )
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45304226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档