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



当我使用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]

这可能是因为反应流合约。

反应式流自述文件

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

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

因此,它们提供了一种subscribeWith(),可以返回您的Disposable而不是无效。或者你可以使用那些超载的方法,它可以给你一个一次性的,例如:subscribe(consumer<T>,consumer<Throwable>,action)

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

在 RxJava2 中,Disposable 对象被传递给 Observer 的 onSubscribe 回调方法。您可以从 onSubscribe 回调方法获取一次性对象,并在将观察者订阅到可观察对象后的稍后时间点使用它来释放订阅。

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

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

最新更新