将 lambda 与 JdbcTemplate 查询方法一起使用显示模棱两可的错误
Using lambda with JdbcTemplate query method showing ambigious error
当我编译这段代码时,它显示
[错误] JdbcTemplate
类型的方法 query(String, Object[], ResultSetExtractor) 不明确
Collection<MyType> col = getJdbcTemplate().query(someQuery, new Object[]{param},
rs -> {
Map<Long, MyType> map = new HashMap();
while (rs.next()) {
// mapping logic
}
return map.values();
});
但是如果我将 rs
转换为 (ResultSetExtractor<Collection<MyType>>)
它会以某种方式正确编译。
Collection<MyType> col = getJdbcTemplate().query(someQuery, new Object[]{param},
(ResultSetExtractor<Collection<MyType>>) rs -> {
Map<Long, MyType> map = new HashMap();
while (rs.next()) {
// mapping logic
}
return map.values();
});
但是我的 IDE(使用声纳)将其报告为冗余转换,将 lambda 体内的所有内容报告为未使用。我正在使用 jdk 1.8.0_121
有人可以解释一下吗,谢谢
JdbcTemplate
有 3 个名为 query
的方法,其中第一个参数是 String
,第二个参数是 Object[]
:
query(String sql, Object[] args, ResultSetExtractor<T> rse)
query(String sql, Object[] args, RowCallbackHandler rch)
query(String sql, Object[] args, RowMapper<T> rowMapper)
前两个参数的第三个参数的功能接口采用类型为 ResultSet
:
的单个参数
这就是为什么编译器需要一点帮助来弄清楚你指的是哪一个。
IDE/Sonar 有缺陷,看不出强制转换是必要的,这只是一个错误。
当我编译这段代码时,它显示 [错误] JdbcTemplate
类型的方法 query(String, Object[], ResultSetExtractor) 不明确Collection<MyType> col = getJdbcTemplate().query(someQuery, new Object[]{param},
rs -> {
Map<Long, MyType> map = new HashMap();
while (rs.next()) {
// mapping logic
}
return map.values();
});
但是如果我将 rs
转换为 (ResultSetExtractor<Collection<MyType>>)
它会以某种方式正确编译。
Collection<MyType> col = getJdbcTemplate().query(someQuery, new Object[]{param},
(ResultSetExtractor<Collection<MyType>>) rs -> {
Map<Long, MyType> map = new HashMap();
while (rs.next()) {
// mapping logic
}
return map.values();
});
但是我的 IDE(使用声纳)将其报告为冗余转换,将 lambda 体内的所有内容报告为未使用。我正在使用 jdk 1.8.0_121
有人可以解释一下吗,谢谢
JdbcTemplate
有 3 个名为 query
的方法,其中第一个参数是 String
,第二个参数是 Object[]
:
query(String sql, Object[] args, ResultSetExtractor<T> rse)
query(String sql, Object[] args, RowCallbackHandler rch)
query(String sql, Object[] args, RowMapper<T> rowMapper)
前两个参数的第三个参数的功能接口采用类型为 ResultSet
:
这就是为什么编译器需要一点帮助来弄清楚你指的是哪一个。
IDE/Sonar 有缺陷,看不出强制转换是必要的,这只是一个错误。