2016-02-02 7 views
9

なぜRxJavaにasObservableが必要ですか?Subject.asObservableとは何が良いですか?

技術的には、それぞれの科目はすでにObservableです。私は、その後の加入者が使用する放射された値を「記憶」するために必要なので、私はBehaviourSubjectを使用だけ

Observable obs = subject; 
+2

Javadocは、Observableのサブクラスを実装しているが、このサブクラスのプロパティとメソッドをObservableに渡す人を誰でも隠したい場合に便利です。これはあなたが探しているものですか? – AndroidEx

+1

AsObservableでカプセル化:http://www.introtorx.com/Content/v1.0.10621.0/09_SideEffects.html#AsObservable –

+0

私は以前のドキュメントを読んでいます。しかし、スーパークラスを型として返すだけではどんな利点がありますか? –

答えて

16

あなたはまだそれをバックキャストしてSubjectとしてそれを使用することができます。

PublishSubject<String> subject = PublishSubject.create(); 
subject.subscribe(System.out::println); 
Observable<String> observable = subject; 
((PublishSubject<String>) observable).onNext("Hello, world!"); 

Observable.asObservable()が実際にObservableにタイプをキャストしません。実際には現在のObservableをラップします。つまり、誰も上流のObservableにアクセスすることはできません。

ClassCastExceptionasObservable()クラッシュを使用して、同じコード:

PublishSubject<String> subject = PublishSubject.create(); 
subject.subscribe(System.out::println); 
Observable<String> observable = subject.asObservable(); 
((PublishSubject<String>) observable).onNext("Hello, world!"); 

それはfinal修飾子のようにたくさんあります。場合によっては、コードがすべてを100%制御できるようにしたくない場合もあります。

-1

のようにそれをキャストを超えることの利点は何ですか。 Observableを返却して、Subscribersがデータを送信しようとしていないようにしました。あなただけObservableSubjectをキャストした場合

+0

私は実装上のインタフェースを渡す方が良い理由について議論したくないので、Observableから継承しているだけのメリットを知りたいと思っています。 –

関連する問題