类型不匹配:无法从 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 编写的内容。
类型不匹配:无法从单声道转换为单声道。想向 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 编写的内容。