Rx java Subject.asobserved有什么用?

Rx java Subject.asobserved有什么用?,rx-java,Rx Java,为什么RxJava需要asObservable 从技术上讲,每一个主体都是可观察的。它的优点是什么,而不是像铸造一样 可观察obs=受试者; 我需要“记住”发出的值,以便后续订阅者使用,因此我使用了行为主题。我选择返回一个Observable,这样订阅者就不会试图向它发送数据。 如果您只是将主题转换为一个可观察的,那么您仍然可以通过将其转换为主题: PublishSubject=PublishSubject.create(); subject.subscribe(System.out::prin

为什么RxJava需要
asObservable

从技术上讲,每一个主体都是可观察的。它的优点是什么,而不是像铸造一样

可观察obs=受试者;
我需要“记住”发出的值,以便后续订阅者使用,因此我使用了行为主题。我选择返回一个Observable,这样订阅者就不会试图向它发送数据。

如果您只是将
主题
转换为一个
可观察的
,那么您仍然可以通过将其转换为
主题

PublishSubject=PublishSubject.create();
subject.subscribe(System.out::println);
可观察=受试者;
((PublishSubject)可见).onNext(“你好,世界!”);
Observable.asObservable()
实际上不会将类型强制转换为
Observable
;它实际上包装了当前的
可观察的
。这意味着没有人可以访问上游
可观察的

使用
asObservable()
的同一代码因
ClassCastException
崩溃:

PublishSubject=PublishSubject.create();
subject.subscribe(System.out::println);
可观察的=主体.asObservable();
((PublishSubject)可见).onNext(“你好,世界!”);

它很像
最终的
修饰符。有时候你不想让代码百分之百地控制一切。

Javadoc为你的问题提供了一些答案:
这很有用,例如,当你有一个Observable子类的实现,但你想对你将Observable传递给谁隐藏这个子类的属性和方法。
这就是你要找的吗?用AsObservable封装:我以前读过文档。但是,仅仅将超类作为类型返回有什么好处呢?我不想讨论为什么在实现上传递接口更好,我想知道不只是将其转换为从Observable继承的类型有什么好处。