代码之家  ›  专栏  ›  技术社区  ›  Metroids

内联行映射器调用JdbcTemplate.query(绳子!,行映射器<T!>!,vararg Any!)

  •  1
  • Metroids  · 技术社区  · 5 年前

    我拿不到 vararg 一起工作 JdbcTemplate.query(String!, RowMapper<T!>!, vararg Any!) . 如果我不讨论变量参数,它似乎有效。例如:

    fun translates(field: String) = template.query("SELECT key, value FROM table", {
        rs: ResultSet, _: Int -> Pair(rs.getString("key"), rs.getString("value"))
    })
    

    或者这个工程:

    fun translates(field: String) = template.query("SELECT key, value FROM table") {
        rs: ResultSet, _: Int -> Pair(rs.getString("key"), rs.getString("value"))
    }
    

    但是这个 工作(我补充道 , field query(String!, RowMapper<T!>!, vararg Any!) ):

    fun translates(field: String) = template.query("SELECT key, value FROM table WHERE field = ?", {
        rs: ResultSet, _: Int -> Pair(rs.getString("key"), rs.getString("value"))
    }, field)
    

    query(String!, RowMapper<T!>!, vararg Any!)
      where T cannot be inferred for
      fun <T : Any!> query(sql: String!, rowMapper: RowMapper<T!>!, vararg args: Any!): (Mutable)List<T!>!
    
    1 回复  |  直到 5 年前
        1
  •  2
  •   Eugene Petrenko    5 年前

    您可以帮助编译器推断中间lambda的类型,方法是 RowMapper { .. } :

    fun translates(field: String) = template.query("SELECT key, value FROM table", RowMapper { rs: ResultSet, _: Int ->
        Pair(rs.getString("key"), rs.getString("value"))
      }, field)
    

    添加 RowMapper https://kotlinlang.org/docs/reference/java-interop.html