Kotlin – 如何创建RxJava flatmap()的别名函数?

我试图创建一个别名函数Flowable.flatmap()如下,但编译错误。

 fun  Flowable.then(mapper: Function<T, Publisher>): Flowable { return flatMap(mapper) } 

错误是: 在kotlin中定义的接口Function有一个types参数

有什么想法? 谢谢!

flatMap需要一个java.util.function.Function ,实际的错误是你没有在你的Kotlin文件中导入java.util.function.Function ,但是我不建议你使用java-8的function,因为你可以没有利用SAM转换来直接使用java-8函数接口定义的Kotlin代码中的lambda作为参数types。

您应该将Function替换为Function1 ,因为Function接口只是一个Kotlin 标记接口 。 例如:

 // v--- use the `Function1` here fun  Flowable.then(mapper: Function1>): Flowable { return flatMap(mapper) } 

或者使用下面的Kotlin 函数types ,例如:

 // v--- use the Kotlin function type here fun  Flowable.then(mapper: (T) -> Publisher): Flowable { return flatMap(mapper) }