2016-02-02 8 views
9

Warum benötigt RxJava asObservable?Was ist Subject.asObservable gut für?

Technisch ist jedes Subjekt bereits ein Observable. Was ist der Vorteil davon über es gerade wie Gießen

Observable obs = subject; 
+2

Javadoc gibt eine Antwort auf Ihre Frage: 'Dies ist nützlich, wenn Sie beispielsweise eine Subclass von Observable haben, aber die Eigenschaften und Methoden dieser Subklasse vor denen verbergen wollen, an die Sie das Observable übergeben Ist das wonach Sie suchen? – AndroidEx

+1

Encapsulating mit AsObservable: http://www.introtorx.com/Content/v1.0.10621.0/09_SideEffects.html#AsObservable –

+0

Ich lese die Dokumentation vor. Aber was ist der Vorteil gegenüber der Rückgabe der Superklasse als Typ? –

Antwort

16

Wenn Sie gerade waren, um die Subject zu einem Observable werfen dann könnte man es noch als Subject verwenden, indem sie Gießen zurück:

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

Observable.asObservable() eigentlich nicht um den Typ Observable werfen; es wickelt tatsächlich die aktuelle Observable. Das bedeutet, dass niemand Zugriff auf die Upstream Observable hat.

Der gleiche Code mit asObservable() stürzt mit einem ClassCastException:

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

Es ist viel wie der final Modifikator. Manchmal möchten Sie nicht, dass Code 100% Kontrolle über alles hat.

-1

ich brauchte zu „erinnern“, um den emittierten Wert für nachfolgende Teilnehmer zu verwenden, so habe ich eine BehaviourSubject. Ich habe mich dafür entschieden, ein Observable zurückzugeben, damit die Abonnenten nicht versuchen, Daten an sie zu senden.

+0

Ich möchte nicht diskutieren, warum es besser ist, eine Schnittstelle über eine Implementierung zu übergeben. Ich möchte wissen, welchen Vorteil es hat, nicht nur zu werfen, wie es von Observable erbt. –

Verwandte Themen