2017-06-16 6 views
1

Observable.subscribe()を使用しているとき、通常はDisposableを返します。なぜrxjava Observable.subscribe(observer)がvoidを返すのですか?

しかし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]

答えて

0

RxJavaのどのバージョンをお使いですか? RxJava2(io.reactivex.rxjava2):

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

AndroidStudioでコンパイル 'io.reactivex.rxjava2:rxandroid:2.0.1'を使用します。 – coolsik

+0

https://github.com/ReactiveX/RxJava/blob/2.x/src/main/java/io/reactivex/ Observable.java public final void subscribe(オブザーバーオブザーバー){ ... } – coolsik

+0

ホー! 'Observer'が' onSubscribe(...) 'に' Disposable'を受け取ったからです。代わりに 'Consumer'を使う必要があります。 –

1

おそらくReactive Stream契約のためです。

Reactive Stream README

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

Publisherのインタフェースは、定義されたリターン無効です。 RxJava Flowableは、そのインタフェースを実装しています。そしてRxJava Observableもその契約に従います。

したがって、無効の代わりにDisposableを返すようにsubscribeWith()を提供しています。または、これらの過負荷メソッドを使用して、使い捨てのものを返すこともできます。subscribe(consumer<T>,consumer<Throwable>,action)

PS:これは私の推測以上です。私はそれが分からない。

+0

が確認されました。詳細はこちら[https://github.com/ReactiveX/RxJava/wiki/What's-different-in-2.0#subscriber]と[この質問では](https://stackoverflow.com/questions/44640844)を読むことができます。/subscribewith-vs-subscribe-in-rxjava2android)を参照してください。 – Incinerator

0

RxJava2では、DisposableオブジェクトがObserverのonSubscribeコールバックメソッドに渡されます。 onSubscribeコールバックメソッドからDisposableオブジェクトを保持し、それを使用してオブザーバをオブザーバブルにサブスクライブした後の時点でサブスクリプションを破棄できます。

関連する問題