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);