我不能让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!>!发布于 2019-02-25 22:01:10
您可以通过使用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
https://stackoverflow.com/questions/54875181
复制相似问题