RxJava2-observable.subscribe-onComplete是动作类型

RxJava2-observable.subscribe-onComplete是动作类型,java,rx-java2,Java,Rx Java2,在RxJava2中,您不能这样做 observable.subscribe(s -> { System.out.println(s); }, e -> { System.err.println(e); }, c -> { System.err.println(c); }); Action onComplete = new Action() { @Override

在RxJava2中,您不能这样做

    observable.subscribe(s -> {
        System.out.println(s);
    }, e -> {
        System.err.println(e);
    }, c -> {
        System.err.println(c);
    });
    Action onComplete = new Action() {
        @Override
        public void run() throws Exception {
            System.out.println("on complete");
        }       
    };
    observable.subscribe(s -> {
        System.out.println(s);
    }, e -> {
        System.err.println(e);
    },onComplete);
因为c->{}不是
Action
类型(显然)

相反,你不得不这样做

    observable.subscribe(s -> {
        System.out.println(s);
    }, e -> {
        System.err.println(e);
    }, c -> {
        System.err.println(c);
    });
    Action onComplete = new Action() {
        @Override
        public void run() throws Exception {
            System.out.println("on complete");
        }       
    };
    observable.subscribe(s -> {
        System.out.println(s);
    }, e -> {
        System.err.println(e);
    },onComplete);

onComplete
不作为
消费者
类型的任何原因?

原因是onComplete不发出任何数据。使用者需要一个类型。如果某件事完成了,它就完成了

如果您有一个
Completable
,它只调用onComplete(),而onComplete()也没有发出数据

未完成实际上意味着已完成。onNext/onSuccess表示它有一个
消费者
发出的数据,而onError表示它有一个
消费者