在FlowTable中使用方法引用时,Kotlin无法推断类型

在FlowTable中使用方法引用时,Kotlin无法推断类型,kotlin,type-inference,rx-java2,flatmap,Kotlin,Type Inference,Rx Java2,Flatmap,我用Java编写了以下代码: Flowable.just(1,2,3) .flatMap(Flowable::just); Kotlin中的代码: Flowable.just(1,2,3) .flatMap(Flowable::just) 虽然Java代码可以很好地编译,但Kotlin编译器说:“错误:(47,30)Kotlin:类Flowable需要一个类型参数:io.reactivex中定义的Publisher” 但是,这可以很好地编译: Flowable

我用Java编写了以下代码:

Flowable.just(1,2,3)
        .flatMap(Flowable::just);
Kotlin中的代码:

Flowable.just(1,2,3)
        .flatMap(Flowable::just)
虽然Java代码可以很好地编译,但Kotlin编译器说:“错误:(47,30)Kotlin:类Flowable需要一个类型参数:io.reactivex中定义的Publisher”

但是,这可以很好地编译:

Flowable.just(1,2,3)
        .flatMap { Flowable.just(it) }

我做错了什么,或者Kotlin为什么不能自动推断出Flowable的类型?

这不是一个很好的答案,但它太长了,无法发表评论

在第一种不编译的情况下,错误与Kotlin没有选择正确的
Flowable::just
方法传递到
Flowable.flatMap(…)
有关。有10种不同的
可流动。只定义了(…)
方法,其中差异是参数的数量

在第二种情况下,您将传递一个lambda,该lambda显式调用
Flowable.just()
的单参数版本(即单参数版本)

在第一种情况下,Kotlin显然是在选择其他十种
Flowable::just
方法中的一种,而不是寻找一种与
Flowable.flatMap()
(其中定义了12种)所期望的签名相匹配的方法。相反,Java能够(从参数的签名)推断
.just()
的许多重载中要传递哪一个

这可能是Kotlin的一个缺点,但我想听听Kotlin编译器专家的看法。

摘自:“lambda表达式总是被大括号包围。”