为什么Flowables不是Observables

时间:2017-05-09 17:15:34

标签: rx-java rx-java2 reactive

为什么Flowables不是Observables;可观察接口几乎是Flowable的一个子集,它们的实现几乎相同。

为什么他们不实现通用接口,所以我们可以直接将Flowable转换为Observable?

2 个答案:

答案 0 :(得分:5)

  

关于在RxJava 0.x中引入背压的一点遗憾是   而不是具有单独的基础反应类,Observable   本身就是改装了。背压的主要问题是很多   热门资源,例如UI事件,无法合理地反压力   导致意外的MissingBackpressureException(即初学者没有   期待他们。)

     

我们试图通过拥有来补救2.x中的这种情况   io.reactivex.Observable非背压和新的   io.reactivex.Flowable是支持背压的基础反应类。

https://github.com/ReactiveX/RxJava/wiki/What's-different-in-2.0#observable-and-flowable

答案 1 :(得分:5)

  

为什么Flowables不是Observables

概念分离。我会选择Flowable,因为这可以做所有其他类型。然而,社区强烈反映了不同类型的主要行为属性:SingleMaybeCompletable ......

  

Observable接口几乎是Flowable的子集

这是一个可能不会每天编程的人的共同观点。对他们来说不幸的是,类型系统和语言(Java)不会让这种高级抽象很容易被专门化或完全专门化。

另外,实施背压需要specific algorithms and building blocks并且可能变得非常复杂。我们建议您查看其中一个较为困难的运算符之间的区别:Flowable.flatMapIterable vs Observable.flatMapIterable

  

为什么它们不实现公共接口,因此我们可以直接将Flowable强制转换为Observable

Flowable实现了Reactive-Streams接口,因此我们不能只声明Subscriber extends ObserverSubscription extends Disposable

此外,在v2早期的某个时刻,Observable实施了Publisher并造成了大量的歧义,手动播放对图书馆用户来说是一个主要的痛点。