Subject.asObservable 有什么用? [英] What is Subject.asObservable good for?

查看:21
本文介绍了Subject.asObservable 有什么用?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

为什么 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆