为什么Flowables不是Observables;可观察接口几乎是Flowable的一个子集,它们的实现几乎相同。
为什么他们不实现通用接口,所以我们可以直接将Flowable转换为Observable?
答案 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
,因为这可以做所有其他类型。然而,社区强烈反映了不同类型的主要行为属性:Single
,Maybe
,Completable
......
Observable接口几乎是Flowable的子集
这是一个可能不会每天编程的人的共同观点。对他们来说不幸的是,类型系统和语言(Java)不会让这种高级抽象很容易被专门化或完全专门化。
另外,实施背压需要specific algorithms and building blocks并且可能变得非常复杂。我们建议您查看其中一个较为困难的运算符之间的区别:Flowable.flatMapIterable vs Observable.flatMapIterable。
为什么它们不实现公共接口,因此我们可以直接将Flowable强制转换为Observable
Flowable
实现了Reactive-Streams接口,因此我们不能只声明Subscriber extends Observer
和Subscription extends Disposable
。
此外,在v2早期的某个时刻,Observable
实施了Publisher
并造成了大量的歧义,手动播放对图书馆用户来说是一个主要的痛点。