在使用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编译器专家有什么话要说。