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;
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;
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.
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.
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. –
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
Encapsulating mit AsObservable: http://www.introtorx.com/Content/v1.0.10621.0/09_SideEffects.html#AsObservable –
Ich lese die Dokumentation vor. Aber was ist der Vorteil gegenüber der Rückgabe der Superklasse als Typ? –