Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么不叫doOnDispose?_Java_Rx Java2 - Fatal编程技术网

Java 为什么不叫doOnDispose?

Java 为什么不叫doOnDispose?,java,rx-java2,Java,Rx Java2,当创建这样的可观察对象时: public void foo() { Observable observable = Observable.fromCallable(() -> { bar(); return ""; }) .doOnSubscribe(disposable -> System.out.println("onSubscribe")) .doOnDispose(() -> System.o

当创建这样的可观察对象时:

public void foo() {

    Observable observable = Observable.fromCallable(() -> {
        bar();
        return "";
      })
      .doOnSubscribe(disposable -> System.out.println("onSubscribe"))
      .doOnDispose(() -> System.out.println("onDispose"));

    Disposable disposable = observable.subscribe();
    disposable.dispose();    
}

private void bar() {
    System.out.println("bar");
}
调用了
doOnSubcribe
,而未调用
doOnDispose


为什么会这样?

您需要使用
doFinally()
操作符

doOnDispose()
有一个非常狭窄的用例,在这个用例中,可观察对象被显式地处理。在您的示例中,可观察对象通过
onComplete()
自然终止。当您调用
dispose()
时,可观察对象已经完成,并且不会发生任何事情——处理完成的可观察对象没有任何效果