2017-08-05 15 views
2

次のようにFlowable.flatmap()というエイリアス関数を作成しようとしましたが、コンパイルエラーです。Kotlin - RxJavaの別名機能を作成する方法flatmap()?

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

エラーは次のとおりです。kotlinに

を定義したインタフェースFunction<out R>に対して期待一つの型引数は、任意のアイデアをお持ちですか?ありがとう!

答えて

1

flatMapjava.util.function.Functionを取り、実際にエラーがあなたのKotlinファイルでjava.util.function.Functionをインポートしていないですが、あなたが使用するSAM Conversionsの利点を取ることができないので、私はあなたが機能を使用することをお勧めしません。パラメータタイプとして機能インタフェースで定義されたKotlinコードから直接ラムダ。

Functionは、FunctionのインターフェイスがKotlin marker interfaceであるため、Function1に置き換える必要があります。例えば:

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

OR例えば、以下のようにKotlin function typeを使用します。

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

Kotlin関数型の作品、ありがとう! – akabc

関連する問題