为什么rxjava Observable.subscribe(observer)返回void?

时间:2017-06-16 07:01:36

标签: rx-java rx-android

当我使用Observable.subscribe()时,通常会返回Disposable。

但是Observable.subscribe(Observer)返回void。

所以我无法处置Observable.subscribe(Observer)。

根据introtorx.com Observable.subscribe(Obeserver)返回Disposable。

为什么rx和rxjava不同?

++++++++++++++

我在Android Studio中使用compile 'io.reactivex.rxjava2:rxandroid:2.0.1'

github.com/ReactiveX/RxJava/blob/2.x/src/main/java/io/reactivex/Observable.java#L10831

public final void subscribe(Observer<? super T> observer) {
  ... 
}

[[1]:https://i.stack.imgur.com/0owg1.png][1]

[[2]:https://i.stack.imgur.com/7H4av.jpg][2]

3 个答案:

答案 0 :(得分:2)

这可能是因为Reactive Stream合同。

Reactive Stream README

public interface Publisher<T> {
    public void subscribe(Subscriber<? super T> s);
}

Publisher的接口定义为返回void。 RxJava Flowable实现了该接口。并且RxJava Observable也遵循该合同。

因此,他们提供subscribeWith()来返回Disposable而不是空格。或者你也可以使用那些可以给你一次性的重载方法:subscribe(consumer<T>,consumer<Throwable>,action)

PS:高于我的猜测。我不确定。

答案 1 :(得分:0)

您使用的是RxJava的哪个版本?使用RxJava2(io.reactivex.rxjava2):

public abstract class Observable<T> implements ObservableSource<T> {
  ...
  public final Disposable subscribe() {...}
  ...
}

答案 2 :(得分:0)

在RxJava2中,Disposable对象被传递给Observer的onSubscribe回调方法。您可以从onSubscribe回调方法获取Disposable对象,并在将观察者订阅到observable之后使用它来处理订阅。