Android 为什么无法将BehaviorSubject映射到另一个BehaviorSubject

Android 为什么无法将BehaviorSubject映射到另一个BehaviorSubject,android,mvvm,rx-java2,Android,Mvvm,Rx Java2,至少在移动应用程序中,BehaviorSubject经常被用来为属性建模——它有一个当前值,可以随时查询并观察 有时它只想转换一个行为主体,而不订阅它。例如,如果存在类,则该类充当几个转换的行为主体和潜在订阅者之间的中间层 我在这里遇到的问题,至少在RxJava2中,是在BehaviorSubject上应用运算符总是返回Observable。因此,我的中间层不能再提供BehaviorSubject的api了 一个可能的解决方案是创建新的BehaviorSubjects并将其订阅到原始的Behav

至少在移动应用程序中,
BehaviorSubject
经常被用来为属性建模——它有一个当前值,可以随时查询并观察

有时它只想转换一个
行为主体
,而不订阅它。例如,如果存在类,则该类充当几个转换的
行为主体
和潜在订阅者之间的中间层

我在这里遇到的问题,至少在RxJava2中,是在
BehaviorSubject
上应用运算符总是返回
Observable
。因此,我的中间层不能再提供
BehaviorSubject
的api了

一个可能的解决方案是创建新的
BehaviorSubject
s并将其订阅到原始的
BehaviorSubject
中,但总体而言,这似乎是个坏主意,也许我现在不想订阅,而只想按需订阅,即当我中间层的用户实际需要这些主题时

在我的例子中,上下文是一个具有MVVM模式的Android应用程序,其中视图模型向视图公开
BehaviorSubject
,这些视图大部分来自应用程序中的另一个
BehaviorSubject
s。我目前在视图模型中进行了订阅,但我想对此进行改进,因为视图模型并不是真正的消费者,不应该订阅任何东西-当视图实际需要来自主题的东西时,应该激活主题

不,我不能在视图模型中只使用
Observable
,因为有单元测试和一些其他调用检查某个点的值,这不能仅使用
Observable
来完成


我的主要问题是,为什么不能简单地将
BehaviorSubject
转换为另一个
BehaviorSubject
。还有一个很好的例子,在所描述的上下文中,使用
行为主体
的推荐方法是什么。

它不能正确组合,运算符是避免方法分派问题的最终方法。另外,如果你在转换主题的旁边,同时也在原始主题的旁边,那么你会为最终消费者创建多个入口点,并且可能违反可观察契约

但是您可以将多个主题合并在一起,每个主题都由其各自的事件驱动,最终消费者将正确地接收事件

不,我不能在视图模型中只使用Observable,因为有单元测试和其他一些调用检查某个点的值,这不能只使用Observable来完成

您是否尝试过
blockingFirst()
从从那些原始
BehaviorSubject
开始的链中获取当前值


否则,我不清楚您的设计,因为它过于关注主题,而不是作为某些活动的单一发起人。

谢谢。现在更清楚了。我认为在某些情况下,
blockingFirst
不是一种替代方法,例如,用默认值替换初始化的行为主体。。。这是否也会导致激活一个可能的源可观察对象(同时阻止当前线程)?另外:例如,在iOS中,有一个名为
属性
的类,将运算符应用于属性只会返回另一个
属性
(属性本质上是一个具有“值”的可观察对象)字段,类似于
BehaviorSubject
)。我正在将业务逻辑组件移植到Android。。。我只是想知道为什么像这样的结构在那里可用而在这里不可用(这不是批评,我不知道内部结构)。