为什么我可以用 Mono.fromCalleable 放置可为空的值

Why i can put nullable value with Mono.fromCalleable

我想知道为什么我可以做类似的事情:

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

它成功了。我知道在响应式编程中我们不应该处理通道中的空值

因为用 null 完成 Mono 是可以的。在这种情况下,它直接移动到具有空(空)内容的完成状态:

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

其中:

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

当您调用 block() 时,您只需从 Mono.

中得到 null value

重点是通道中不会处理任何事情,因为状态已经 complete。所以,我们马上去returnnull