java - 在 Kotlin 中映射的可变参数

标签 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))

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

最佳答案

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))

关于java - 在 Kotlin 中映射的可变参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42222573/

相关文章:

java - 分 2 步迭代 `IntStream`

python - 具有碰撞功能的联合python字典

c# - 无法通过反射将类型传递给泛型类

java - ORA-00936,Java 和 SQL

java - 参数包含空格的运行时 exec

python - 如何在我的 JSON 列表中添加新字典

javascript - 我可以将 map 函数与 2 个数组一起使用吗?

java - Java 中的泛型方法和继承

generics - 引用具有关联类型的实例实现协议(protocol)

java - Vector or Synchronized LinkedList?哪个更好用?