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

时间:2017-08-05 03:27:43

标签: kotlin rx-java

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

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

错误是: kotlin中定义的接口Function<out R>需要一个类型参数

有什么想法吗?谢谢!

1 个答案:

答案 0 :(得分:1)

- (instancetype)initWithFrame:(CGRect)frame titles:(NSArray *)titles { self = [super initWithFrame:frame]; if (!self) { return nil; } // ultimate goal is to set AYStepperView's currentSection // the following also prints 0 NSLog(@"%lu", _currentSection); return self; } 需要flatMap,实际错误是您没有在Kotlin文件中导入java.util.function.Function,但我不建议您使用函数,因为你不能利用SAM Conversions直接从Kotlin代码中使用lambda,该代码用函数接口定义为参数类型。

您应该将java.util.function.Function替换为Function,因为Function1界面只是Kotlin marker interface。例如:

Function

使用如下的Kotlin function type,例如:

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