Не рекомендуется ли использовать Mono<Необязательный>?

#java #reactive-programming #project-reactor

#java #реактивное программирование #проект-реактор

Вопрос:

Я пишу веб-сервер с широким использованием реактивного программирования. Я заметил, что слишком много раз забывал проверять, не является ли Mono пустым. Я использую WebFlux, поэтому он преобразует пустое значение Mono в 200 OK ответ, и это очень затрудняет обнаружение этих ошибок.

Один из способов уменьшить количество этих ошибок — сделать отсутствие значения явным, используя Mono<Optional<T>> вместо Mono.empty() .

Это очень похоже на Optional и null debate, он даже использует тот же класс. И хотя есть много людей, которые выступают за использование Optional , и это широко поддерживается библиотеками, я еще не видел, чтобы кто-нибудь использовал Mono<Optional<T>> .

Есть ли какие-либо недостатки в использовании Mono<Optional<T>> ?

Какой лучший способ надежно обрабатывать случаи отсутствия значений?

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

1. Это выглядит как Optional<Optional<T>> 🙂

Ответ №1:

Используя Mono<Optional<T>> вместо Mono<T> Mono , вы ставите себя в сложную ситуацию получения пустого Optional файла, но предполагаете, что у него всегда будет экземпляр, поэтому на самом деле это не помогает, а только добавляет ненужное выделение.

Есть удобный оператор Mono#single, он выдаст ошибку, если вы ожидали непустое значение Mono , но вместо этого получили пустое.