1

尝试将Mono内部具有可迭代对象的对象转换为Flux我收到此错误(kotlinc控制台):

>>> Mono.just(listOf(1,2,3,4,5)).flatMapMany(Flux::fromIterable)
error: type inference failed: Not enough information to infer parameter R in fun <R : Any!> flatMapMany(p0: Function<in (Mutable)List<Int!>!, out Publisher<out R!>!>!): Flux<R!>!
Please specify it explicitly.

Mono.just(listOf(1,2,3,4,5))这只是一个简单的例子)

如果我更改为以下内容,它将起作用:

>>> Mono.just(listOf(1,2,3,4,5)).flatMapMany { Flux.fromIterable(it) }
res28: reactor.core.publisher.Flux<kotlin.Int!>! = MonoFlatMapMany

因此,用作品替换flatMapMany(Flux::fromIterable)flatMapMany { Flux.fromIterable(it) }但使其更大且功能更少,在 Java 中,Flux::fromIterable符号确实有效(jshell控制台示例):

jshell> Mono.just(Arrays.asList(1,2,3,4,5)).flatMapMany(Flux::fromIterable)
$6 ==> MonoFlatMapMany

我试图以不同的方式根据需要显式设置类型,但没有任何效果:

  • Mono.just(listOf(1,2,3,4,5)).flatMapMany<Int>(Flux::fromIterable)
  • Mono.just(listOf(1,2,3,4,5)).flatMapMany(Flux<Int>::fromIterable)
  • Mono.just(listOf(1,2,3,4,5)).flatMapMany(Flux::fromIterable<Int>)
4

1 回答 1

1

Kotlin 1.4 带来了更强大的类型推断算法,它可能会帮助我们解决这些问题。但目前我们对此无能为力。我们只需要显式地写出 lambda。JetBrains 意识到了这个可用性问题,并且正在努力解决这个问题。

于 2020-06-11T13:19:37.967 回答