我有一个问题,理解为什么以下代码不起作用。我做错了什么或者是RxJava2实现中的某种错误?
private Disposable savedDisposable;
@Test
public void test() {
final TestObserver<Integer> observer = new TestObserver<>();
Observable<Integer> t = Observable.just(10)
.delay(100, TimeUnit.MILLISECONDS)
.doOnSubscribe(disposable -> savedDisposable = disposable);
t.subscribe(observer);
savedDisposable.dispose(); //this doesn't work
//observer.dispose(); //this works
assertTrue(observer.isDisposed());
}
答案 0 :(得分:11)
回答发布的问题:
您正在处理中间,因此Disposable
无法知道其上游已被处置,因为dispose()
来电始终向上游传输。
有DisposableObserver
,ResourceObserver
,subscribeWith
和lambda - subscribe()
方法可以在最后找到Disposable
个对象可以通过dispose()
处理。
在问题列表中,结果发现OP希望Observer
和Disposable
出现在消费者类型上,并发现这可以通过约束泛型来实现,例如:
public static <T, K extends Observer<T> & Disposable> K subscribe(
Observable<T> o, K observer) {
o.subscribe(observer);
return observer;
}