Несоответствие типов: невозможно преобразовать из Mono <A>в Mono <B> - PullRequest
0 голосов
/ 25 мая 2019

Несоответствие типов: невозможно преобразовать из Mono в Mono.Хочет добавить сообщение об ошибке в B, затем я хочу вернуть Mono of B.

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());

1 Ответ

1 голос
/ 26 мая 2019

Как видно из подписи из onErrorResume(), резервная функция может привести только к моно того же типа, что и исходный моно. Это не зря.

Что, если у вас вместо этого Mono<A> mono = Mono.just(new A());. Теперь не будет выдано никакой ошибки, поэтому резервная функция никогда не будет вызываться. Следовательно, у вас все еще есть Mono<A>, , а не a Mono<B>.

В Reactor нет ничего особенного. Рассмотрим тот же тип потока с использованием catch:

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

Очевидно, этот код не компилируется, потому что, если ошибка не выдана, будет возвращено A, но метод должен вернуть B. По сути, это то, что вы пытаетесь написать, но с помощью Reactor.

...