我在我的项目中使用 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 对和取一对可变参数。

由于代码中的 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))

10-08 03:41