在使用Flowable中的方法引用时,Kotlin无法推断types

我在Java中有这样的代码:

Flowable.just(1,2,3) .flatMap(Flowable::just); 

和这个代码在Kotlin:

 Flowable.just(1,2,3) .flatMap(Flowable::just) 

虽然Java代码编译得很好,但是Kotlin编译器却说:“错误:(47,30)Kotlin:对类Flowable:一个types参数期望在io.reactivex中定义”

但是这编译罚款:

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

我在做什么错误或Kotlin如何自动推断Flowable的types?

这不是一个完全的答案,但是评论太长了。

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

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

在第一种情况下,Kotlin显然选择了其他十个Flowable::just方法中的一个,而不是寻找与Flowable.flatMap() (其中有12个定义)预期的符号相匹配的方法。 相比之下,Java能够从参数的签名中推导出.just()的许多重载中的.just()可以通过。

这可能是一个Kotlin的缺点,但我想听听Kotlin编译器专家有什么话要说。