java-使用lambda和JdbcTemplate查询方法显示歧义错误

当我编译这段代码时
[错误]类型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有缺陷,看不到强制转换是一个错误.

上一篇:从零开始针对 .NET 应用的 DevOps 运营实践 - Jenkins & SonarQube 安装配置


下一篇:声纳皮棉插件无法读取lint-results.xml