Встроенный RowMapper <T>, вызывающий JdbcTemplate.query (String !, RowMapper!, варарг любой!) - PullRequest
0 голосов
/ 26 февраля 2019

Я не могу заставить 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 Ответ

0 голосов
/ 26 февраля 2019

Вы можете помочь компилятору определить тип лямбды в середине, сказав 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 сделанного Kotlin SAM работы https://kotlinlang.org/docs/reference/java-interop.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...