Rx java 关于subscribeWith方法在返回订户时的用法

Rx java 关于subscribeWith方法在返回订户时的用法,rx-java,Rx Java,我想知道为什么subscribebioth方法返回Subscriber,但不是严格意义上的一次性订阅,或者可能是订阅 我认为subscribeWith方法是为使用RxJava1.x的subscribe方法而设计的,该方法返回订阅。因此,在2.0中,我认为subscribeWith方法的主要用途将是与实现一次性的订户一起使用 然而,由于subscribeWith方法可以返回订阅者,因此可以使用类似主题的用法(例如下面的代码) Subscriber<Long> subscriber =

我想知道为什么
subscribebioth
方法返回Subscriber,但不是严格意义上的一次性订阅,或者可能是订阅

我认为
subscribeWith
方法是为使用RxJava1.x的
subscribe
方法而设计的,该方法返回订阅。因此,在2.0中,我认为
subscribeWith
方法的主要用途将是与实现一次性的订户一起使用

然而,由于
subscribeWith
方法可以返回订阅者,因此可以使用类似主题的用法(例如下面的代码)

Subscriber<Long> subscriber = Flowable.interval(100, TimeUnit.MILLISECONDS)
    .subscribeWith(new Subscriber<Long>() {
      ...
    });

...

subscriber.onNext(999);

...
Subscriber=Flowable.interval(100,TimeUnit.ms)
.subscribowith(新订户(){
...
});
...
订户.onNext(999);;
...

这是可以的还是我不应该做的事情?

2.x中的订阅服务器不实现一次性,需要包装/劫持每个订阅服务器。您可以取回您订阅的内容,我们有
ResourceSubscriber
DisposableSubscriber
,它们以正确的方式专门实现了
一次性

然而,由于subscribeWith方法可以返回订阅者,因此可以使用类似主题的用法(例如下面的代码)

Subscriber<Long> subscriber = Flowable.interval(100, TimeUnit.MILLISECONDS)
    .subscribeWith(new Subscriber<Long>() {
      ...
    });

...

subscriber.onNext(999);

...
不建议这样做,因为您可能同时调用
onNext
来违反协议。(这不是由于
subscribeWith
导致的,因为您可以预先创建
订阅者
,调用
subscribe()
,然后以相同的方式对原始
订阅者
实例调用
onNext()
。)

subscribeWith
确实可以与那些以流畅的方式支持一次性的订阅者合作,并允许以下模式:

CompositeDisposable cd = new CompositeDisposable();

cd.add(source.subscribeWith(new ResourceSubscriber<Integer>() { ... }));
CompositeDisposable cd=new CompositeDisposable();
add(source.subscribeWith(newResourceSubscriber(){…}));

我们的wiki提供了此和其他2.x详细信息。

如果您有一个相同的观察者要绑定到不同的观察者,请使用.subscribeWith,以便多个观察者可以使用相同的观察者实现。

感谢您的解释!鲍,我肯定这一点。是的,我读过维基,我想
subscribeWith
应该是用来退回一次性的。但是,我检查了
subscribeWith
方法,发现它可以返回任何必须与参数类型相同的订阅者。这使我想知道是否还有其他用法。同样,我的代码与
subscribeWith
无关。我通常在
subscribe
方法中创建一个订户实例,所以我没有说明这种情况。这是RxJava用户应该知道他们不应该做的一件事。它使用observable,但flowable是抛出错误的!!