为什么RxJava需要asObservable
?
从技术上讲,每个主题已经是一个Observable。它的优点是什么,而不仅仅是像
那样Observable obs = subject;
答案 0 :(得分:21)
如果您只是将Subject
转换为Observable
,那么您仍然可以将其作为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
。
使用asObservable()
的相同代码与ClassCastException
崩溃:
PublishSubject<String> subject = PublishSubject.create();
subject.subscribe(System.out::println);
Observable<String> observable = subject.asObservable();
((PublishSubject<String>) observable).onNext("Hello, world!");
这与final
修饰符非常相似。有时您不希望代码100%控制所有内容。
答案 1 :(得分:0)
我需要&#34;记住&#34;后续订阅者使用的发射值,因此我使用了BehaviourSubject。我选择返回一个Observable,以便订阅者不会尝试向其发送数据。