"Subject.asObservable()"与主题本身"主题"之间有什么区别?

Dan*_*ico 4 android kotlin rx-java

如果Subject继承自Observable,那么基于任何Subject类似的下一个选项的区别是什么:

private val locationSubject: ReplaySubject<Location> = ReplaySubject.create<Location>()
Run Code Online (Sandbox Code Playgroud)

1.回归subject自己Observable

fun getLocations(): Observable<Location> = locationSubject
Run Code Online (Sandbox Code Playgroud)

2.回归subject.asObservable().

fun getLocations(): Observable<Location> = locationSubject.asObservable()
Run Code Online (Sandbox Code Playgroud)

Tre*_*nez 7

如果你看一下你的实现,.asObservable你会看到它通过一个什么都不做的运算符来提升observable.这实际上只是将您的主题包装在一个可观察的对象中,这使得消费代码无法将其转换回主题.

asObservable 是隐藏实现细节的防御机制,而不是其他.