如何在使用Flux.handle()时指定泛型类型?
如何在Flux.handle()中指定泛型类型
你不需要额外使用map()转换类型,有两种直接指定泛型的方式:
方式一:显式声明lambda参数的类型
在handle的lambda中明确指定输入参数和sink的泛型类型,编译器就能正确推断返回的Flux类型:
Flux.range(0, 10) .handle((Integer x, SynchronousSink<Integer> sink) -> { if (x % 2 == 0) sink.next(x); }) .subscribe(System.out::println);
方式二:显式指定handle方法的泛型参数
直接为handle方法指定输出泛型,强制编译器使用该类型:
Flux.range(0, 10) .<Integer>handle((x, sink) -> { if (x % 2 == 0) sink.next(x); }) .subscribe(System.out::println);
原理说明
原代码中,lambda里的SynchronousSink未指定泛型,编译器默认推断为Object,导致handle返回Flux<Object>。通过上述两种方式明确泛型类型后,编译器会直接生成对应类型的Flux,无需后续map转换。
内容的提问来源于stack exchange,提问作者Jumple
相关产品推荐
相关产品推荐

