Subject.asObservable 有什么用? [英] What is Subject.asObservable good for?
问题描述
为什么 RxJava 需要 asObservable
?
Why does RxJava need asObservable
?
从技术上讲,每个 Subject 已经是一个 Observable.它比像
Technically each Subject is already an Observable. What is the advantage of it over just casting it like
Observable obs = subject;
推荐答案
如果您只是将 Subject
强制转换为 Observable
,那么您仍然可以通过将其返回来将其用作 Subject
:
If you were to just cast the Subject
to an Observable
then you could still use it as a Subject
by casting it back:
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
.
Observable.asObservable()
doesn't actually cast the type to Observable
; it actually wraps the current Observable
. That means that no one has access to the upstream Observable
.
使用 asObservable()
的相同代码因 ClassCastException
崩溃:
The same code using asObservable()
crashes with a ClassCastException
:
PublishSubject<String> subject = PublishSubject.create();
subject.subscribe(System.out::println);
Observable<String> observable = subject.asObservable();
((PublishSubject<String>) observable).onNext("Hello, world!");
它很像 final
修饰符.有时您不希望代码能够 100% 控制一切.
It's a lot like the final
modifier. Sometimes you don't want code to have 100% control over everything.
这篇关于Subject.asObservable 有什么用?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!