类型不匹配:无法从 Mono<A> 转换为 Mono<B>

Type mismatch: cannot convert from Mono<A> to Mono<B>

类型不匹配:无法从单声道转换为单声道。想向 B 添加错误消息,然后我想 return B 的 Mono。

public  Mono<B> case1(){
    A a = new A();
    a.setName("srihari");
    B b = new B();
    a.setName("G SRIHARI");
    Mono<A> mono = Mono.error(new RuntimeException("HARISRI"));

    return mono.onErrorResume(d->{
         b.setErrorMessage(d.getMessage());
        return Mono.just(b);
    }).subscribeOn(Schedulers.elastic());

正如您在 onErrorResume()signature 中看到的那样,后备函数只能生成与源 Mono 类型相同的 Mono。这是有充分理由的。

如果你有 Mono<A> mono = Mono.just(new A()); 会怎么样?现在,不会抛出任何错误,因此永远不会调用回退函数。因此,你还有一个Mono<A>没有一个Mono<B>

这对于 Reactor 来说并没有什么特别之处。考虑使用 try catch 的同一种流程:

public B foo() {
  try {
    // throw new RuntimeException();
    return new A();
  } catch (Exception e) {
    return new B();
  }
}

显然,此代码无法编译,因为如果未抛出错误,A 将被 return 编辑,但方法必须 return B。这基本上就是您要使用 Reactor 编写的内容。