首页 文章

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

提问于
浏览
3

我在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的类型?

1 回答

  • 2

    这不是一个答案,但是评论太长了 .

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

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

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

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

相关问题