【问题标题】:varargs to map in Kotlin在 Kotlin 中映射的可变参数
【发布时间】:2017-02-14 09:40:04
【问题描述】:

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

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

【问题讨论】:

  • 为什么不发布错误信息?它可以帮助人们看到问题,而无需自己尝试......

标签: java dictionary generics kotlin


【解决方案1】:

mapOf 有 3 个实现:什么都不带,带 1 对和 vararg 对。

由于您的代码中的pairs 实际上是Array&lt;Pair&lt;String, Any&gt;&gt;,因此没有可以调用的mapOf 的匹配实现。这是因为 java 实现的可变参数在某些情况下是模棱两可的,因此 Kotlin 需要显式参数。

要使其工作,请使用“spread”运算符来指示应使用可变参数方法。 (https://kotlinlang.org/docs/reference/functions.html#variable-number-of-arguments-varargs)

fun params(vararg pairs: Pair&lt;String, Any&gt;) = MapSqlParameterSource(mapOf(*pairs))

【讨论】:

  • 请注意,mapOf(*pairs) 在将pairs 数组传递给mapOf 之前会创建一个副本。最好使用pairs.toMap()
猜你喜欢
  • 1970-01-01
  • 2019-03-19
  • 1970-01-01
  • 2021-03-11
  • 2023-03-24
  • 2021-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多