内联 RowMapper<T> 调用 JdbcTemplate.query(String!, RowMapper<T!>!, vararg Any!)
Inline RowMapper<T> calling JdbcTemplate.query(String!, RowMapper<T!>!, vararg Any!)
我无法让 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!>!
你可以通过说 RowMapper { .. }
:
来帮助编译器推断中间 lambda 的类型
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
我无法让 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!>!
你可以通过说 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