可变的地图在Kotlin

我在我的项目中使用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)) 

你能请正确的实施建议吗?

mapOf有3个实现:不占用任何东西,取1对,并采取一对可变参数。

由于你的代码中的Array<Pair<String, Any>>实际上是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))