Почему я могу поставить значение Nullable с Mono.fromCalleable - PullRequest
0 голосов
/ 06 января 2019

Интересно, почему я могу сделать что-то вроде:

val ans = Mono.fromCallable { null }.block() 
Assert.assertEquals(null, ans)

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

1 Ответ

0 голосов
/ 07 января 2019

Потому что можно завершить Mono с null. В этом случае он сразу переходит в полное состояние с пустым (нулевым) содержимым:

        T t = callable.call();
        if (t == null) {
            sds.onComplete();
        }
        else {
            sds.complete(t);
        }

Где:

@Override
public final void onComplete() {
    countDown();
}

И когда вы называете это block(), вы просто получаете null value от Mono.

Дело в том, что в каналах ничего не будет обрабатываться, потому что состояние уже complete. Итак, мы немедленно идем к возвращению null.

...