这是一段代码
@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
类型的对象。
对此的解释是什么?
[好,答案是在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
。