2017-02-14 7 views
0

にマッピングするために可変引数:は、私は私のプロジェクトでNamedParameterJdbcTemplateを使用してパラメータをこのように渡すKotlin

MapSqlParameterSource(mapOf(
    "userId" to userId, 
    "count" to count 
)) 

私は、最初の行のすべての時間を書きたくないし、私はその意志私自身の関数を作成したいですペアを取る文字列から任意の値:

params(
    "userId" to userId, 
    "count" to count 
) 

しかし、私はそれを実装しようとしたとき、私は(私はここでエラーの説明を掲載しません)ジェネリック医薬品の問題を持っている:

fun params(vararg pairs: Pair<String, Any>) = MapSqlParameterSource(mapOf(pairs)) 

正しい実装についてアドバイスをいただけますか?

+0

は、なぜあなたはエラーメッセージを投稿しませんか?これは、人々が自分で試してみることなく問題を見るのに役立ちます... – hage

答えて

4

mapOfは3つの実装をとっています。何も取っておらず、1組をとり、varargのペアをとっています。

コード内のpairsは実際にはArray<Pair<String, Any>>なので、mapOfと一致する実装はありません。これは、javaのようなvarargsがそれらを実装しているため、Kotlinは明示的な引数を必要とするため、特定のケースではあいまいです。

"spread"演算子を使用すると、varargメソッドを使用する必要があることを示します。 (https://kotlinlang.org/docs/reference/functions.html#variable-number-of-arguments-varargs

fun params(vararg pairs: Pair<String, Any>) = MapSqlParameterSource(mapOf(*pairs))

+0

varargが*演算子とどのようにマッチするかを学んでいただきありがとうございます。 – awfun

+2

'mapOf(* pairs)'は前に 'pairs'配列のコピーを作成していますそれを 'mapOf'に渡します。 'pairs.toMap()'を使うほうが良いでしょう。 – Ilya

関連する問題