Тип аргумента Flux.onErrorContinue

#java #flux #project-reactor

#java #поток #проект-реактор

Вопрос:

кто-нибудь знает причину Flux.onErrorContinue , по которой аргументы имеют следующий тип:

 public final Flux<T> onErrorContinue(BiConsumer<Throwable, Object> errorConsumer) {
...
}
  

вместо

 public final Flux<T> onErrorContinue(BiConsumer<Throwable, T> errorConsumer) {
...
}
  

?

Ответ №1:

Хорошо, я думаю, я только что понял:

 Flux<Integer> f1 = Flux.fromStream(Stream.of(1));

Flux<String> f2 = f1.map(i ->{
    throw new RuntimeException("bang");
});

f2.onErrorContinue((t, o) -> {
    System.out.println("o = "   o.getClass());
}).subscribe(System.out::println);
  

выводит:

 o = class java.lang.Integer
  

Из потока строк вы не можете знать, что элемент, вызвавший проблему, был целым числом, поэтому единственный вариант — рассматривать его как объект…