Rx java 为什么Observable.publish(Func1)和Observable.replay(Func1)返回Observable?
Rx java 为什么Observable.publish(Func1)和Observable.replay(Func1)返回Observable?,rx-java,Rx Java,Observable.publish()和Observable.replay()返回ConnectableObservable。 但是,当这些方法将接口作为参数(例如Observable.publish(Func1)和Observable.replay(Func1))时,它们将返回Observable 为什么它们返回的是Observable而不是ConnecatbleObservable 如果我将这些方法与一个参数一起使用,我将获得可观察性。 然后我调用submit(Observer)给可观察对
Observable.publish()
和Observable.replay()
返回ConnectableObservable。
但是,当这些方法将接口作为参数(例如Observable.publish(Func1)
和Observable.replay(Func1)
)时,它们将返回Observable
为什么它们返回的是Observable而不是ConnecatbleObservable
如果我将这些方法与一个参数一起使用,我将获得可观察性。
然后我调用submit(Observer)
给可观察对象,可观察对象将开始工作。
我无法调用connect()
,因为可观察对象是可观察的,而不是可连接的可观察的
如果我必须将Observable.publish(Func1)
和Observable.replay(Func1)
用于ConnectableObservable,我认为这些方法必须在ConnectableObservable中,而不是在Observable中
为什么它们是可观察的方法而不是可连接的可观察的方法 我注意到这些方法使原始ConnectableObservable发出原始值,但这些方法使返回的Observable发出转换后的值。 而且,如果用户希望只有特定的观察者才能获得转换后的值,这是有意义的
但是,我仍然想知道为什么这些方法不在可连接可观察中 这些操作符在函数调用期间共享源,也就是说,您可以订阅提供给您的函数的可观察对象,并根据需要应用操作符。这些不会触发对原始源的多个订阅;但对于每个订阅者来说,这种情况都是由操作符单独产生的。因此,订阅本身触发到上游的连接,无需通过
ConnectableObservable
手动执行
例如:
Observable.range(1, 10)
.doOnSubscribe(() -> System.out.println("Subscribed!"))
.publish(o -> Observable.zip(o, o.skip(1), (a, b) -> a + b))
.subscribe(System.out::println);
vs
Observable o=可观测范围(1,10)
.doOnSubscribe(()->System.out.println(“已订阅”);
可观察的.zip(o,o.skip(1),(a,b)->a+b)
.subscribe(System.out::println);
谢谢。现在我明白了原因和好处。但是我完全不明白JavaDocs的解释。这个方法对ConnectableObservable有什么作用吗?但这与问题的主题不同。我可能会考虑一段时间,当我找不到答案时,我可能会发布这个问题。顺便说一句,我很高兴你成为主要贡献者。祝贺
Observable<Integer> o = Observable.range(1, 10)
.doOnSubscribe(() -> System.out.println("Subscribed!"));
Observable.zip(o, o.skip(1), (a, b) -> a + b)
.subscribe(System.out::println);