2016-10-12 1 views
0

私はなぜsubscribeWithメソッドがSubscriberを返しますが、厳密にはDisposableまたはSubscriptionではないのだろうと思います。返信するユーザとのsubscribeWithメソッドの使用について

subscribeWithメソッドは、Subscriptionを返すRxJava 1.xのsubscribeメソッドを使用するために設計されていると思います。したがって、2.0では、subscribeWithメソッドの主な用途は、使い捨てを実装するサブスクライバでの使用になると思います。

Howerverでは、subscribeWithメソッドはサブスクライバを返すことができるため、サブジェクトのような使用法(下のコードなど)が可能です。

Subscriber<Long> subscriber = Flowable.interval(100, TimeUnit.MILLISECONDS) 
    .subscribeWith(new Subscriber<Long>() { 
     ... 
    }); 

... 

subscriber.onNext(999); 

... 

これは問題ではありませんか?

答えて

2

2.xのサブスクライバはDisposableを実装せず、すべてのサブスクライバをラッピング/ハイジャックする必要があります。あなたが購読したものを返すと、具体的にDisposableを正しく実装したResourceSubscriberDisposableSubscriberが返されます。

Howerverでは、subscribeWithメソッドはサブスクライバを返すことができるため、サブジェクトのような使用法(下のコードなど)が可能です。

onNextを同時に呼び出すことによってプロトコルに違反するため、これはお勧めできません。 (これは、Subscriber事前に作成subscribe()を呼び出してから、プロトコルを同じように違反し、元Subscriberインスタンス上onNext()を呼ぶ可能性があるため、subscribeWithの結果ではありません。)

subscribeWithをサポートする加入者で動作するように確かにあり流暢な方法で使い捨てと次のパターンが可能:これと他の2.xの詳細については、

CompositeDisposable cd = new CompositeDisposable(); 

cd.add(source.subscribeWith(new ResourceSubscriber<Integer>() { ... })); 

Seeが私たちのwikiを。

+0

説明ありがとうございます!弓、私はこれについて確信しています。 はい、私はWikiを読んでいました。私は 'subscribeWith'がDisposableを返すことになると思いました。しかし、私は 'subscribeWith'メソッドをチェックしましたが、パラメータタイプと同じでなければならないサブスクライバを返すことができました。これは私に、他の用途が関係しているかどうか疑問に思いました。 また、私のコードは 'subscribeWith'では重要ではありません。私は通常、サブスクライバインスタンスを 'subscribe'メソッドで作成するので、私はそのケースを出さなかった。これは、RxJavaユーザーが何をすべきでないかを知っておくべき1つのことです。 – arching

関連する問題