2017-02-14 86 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