为什么反应堆Mono 被识别为空的Mono?

问题描述 投票:0回答:1

这是一段代码

@Test
public void test_mono_void_mono_empty() {
    Mono.just("DATA")
        .flatMap(s -> Mono.just(s.concat("-")
                                 .concat(s))
                          .doOnNext(System.out::println)
                          .then())
        .switchIfEmpty(Mono.just("EMPTY")
                           .doOnNext(System.out::println)
                           .then())
        .block();
}

将以下结果提供给控制台:

DATA-DATA
EMPTY

这意味着第一个flatMap中的链被识别为空链。

另一方面,Reactor具有由MonoEmpty Mono.empty()返回的以下类method。最重要的是,该方法表示以下内容:

/**
 * Create a {@link Mono} that completes without emitting any item.
 *
 * <p>
 * <img class="marble" src="doc-files/marbles/empty.svg" alt="">
 * <p>
 * @param <T> the reified {@link Subscriber} type
 *
 * @return a completed {@link Mono}
 */
public static <T> Mono<T> empty() {
    return MonoEmpty.instance();
}

不发出任何项目-但实际上我发出了Void类型的对象。

对此的解释是什么?

java project-reactor reactor
1个回答
0
投票

[好,答案是在official java doc中说The Void class is an uninstantiable placeholder class to hold a reference to the Class object representing the Java keyword void

这意味着其主要思想只是将void返回类型表示为一个类,并包含一个Class<Void>公共值。而已。此外,由于构造函数是私有的,因此无法实例化。所有这些随后意味着我们可以分配给Void变量的唯一值是null,该值始终被识别为empty Mono

© www.soinside.com 2019 - 2024. All rights reserved.