当我编译这段代码时
[错误]类型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类型的单个参数:
> ResultSetExtractor.extractData(ResultSet rs)
> RowCallbackHandler.processRow(ResultSet rs)
这就是为什么编译器需要一点帮助来找出您的意思的原因.
IDE / Sonar有缺陷,看不到强制转换是一个错误.