2017-02-14 97 views
0

我用的是NamedParameterJdbcTemplate在我的項目,並通過參數這種方式映射:可變參數在科特林

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對並取一對可變參數。

由於您的代碼中的pairs實際上是Array<Pair<String, Any>>,因此沒有匹配的實現mapOf進行調用。這是由於Java的可變參數在某些情況下實現它們是不明確的,所以Kotlin需要明確的參數。

爲了使其工作,使用「傳播」運算符來指示應該使用可變參數法。 (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