varargs在Kotlin地图

时间:2017-02-14 09:40:04

标签: java dictionary generics 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))

您能否就正确实施提出建议?

1 个答案:

答案 0 :(得分:6)

mapOf有3个实现:不采取任何措施,采取一对并采取一对vararg。

由于代码中的pairs实际上是Array<Pair<String, Any>>,因此无法调用mapOf的匹配实现。这是因为java实现它们的varargs在某些情况下是不明确的,因此Kotlin需要显式参数。

要使其工作,请使用&#34; spread&#34;运算符表示应该使用vararg方法。 (https://kotlinlang.org/docs/reference/functions.html#variable-number-of-arguments-varargs

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