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

时间:2017-05-09 16:24:54

标签: android rx-java kotlin

如果Subject继承自Observable,则根据任何Subject的下一个选项区别如下:

private val locationSubject: ReplaySubject<Location> = ReplaySubject.create<Location>()

1。subject本身作为Observable

返回
fun getLocations(): Observable<Location> = locationSubject

2。返回subject.asObservable()

fun getLocations(): Observable<Location> = locationSubject.asObservable()

1 个答案:

答案 0 :(得分:7)

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

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