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

时间:2017-08-13 07:57:25

标签: 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中定义”

然而这编译得很好:

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

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

1 个答案:

答案 0 :(得分:2)

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

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

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

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

这可能是Kotlin的缺点,但我想听听Kotlin编译专家的意见。