CompletableFuture.Затем примите эквивалент для исключений

#java #completable-future

Вопрос:

java.util.concurrent.CompletionStage#exceptionally ожидает функцию, которая возвращает значение, но что, если я просто хочу Consumer Throwable java.util.concurrent.CompletionStage#thenAccept , чтобы для успешного выполнения было как?

ПРАВКА: Чтобы было ясно, я знаю об whenComplete этом, но это не «принимает Consumer за Throwable подобное java.util.concurrent.CompletionStage#thenAccept «.

Комментарии:

1. Вы могли бы попробовать whenComplete() , что берет BiConsumer , что само по себе либо дает результат, либо выбрасывается.

2. Я знаю об whenComplete этом, но это не то, о чем я прошу.

3. В этом случае вы, возможно, захотите немного пояснить, почему whenComplete() это не работает для вас. Вы спросили «что, если я хочу использовать потребителя» — ну, whenComplete() может быть вариант, если нет другого (я не вижу ни одного, потому CompletionStage.thenAcceptXxx() что это единственные методы, которые принимают Consumer ).

4. Я сказал: «Что, если я просто хочу, чтобы потребитель мог использовать такую возможность, как java.util.concurrent. Этап завершения#Затем примите за успешное выполнение». whenComplete не принимает потребителя за предмет, который можно выбросить. Я просто хочу подтвердить, что в Java API такого нет. Я думаю, что ничего подобного нет, но я могу ошибаться.

5. Ну, следующая лучшая вещь для метода, принимающего a Consumerlt;Throwablegt; , — это тот BiConsumerlt;T, Throwablegt; , который whenComplete() принимает и который получает либо результат, либо выбрасываемый (в соответствии с реализацией CompletableFuture.uniWhenComplete() которого вызывается accept() . Если вам нужны отдельные потребители, вы можете создать BiConsumer параметр, который принимает значение a Consumer для каждого из параметров и который вы вызываете, если параметр не равен нулю.