Ответ 1
Если бы вы просто бросили 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% контроль над всем.