将 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[]:

前两个参数的第三个参数的功能接口采用类型为 ResultSet:

的单个参数

这就是为什么编译器需要一点帮助来弄清楚你指的是哪一个。

IDE/Sonar 有缺陷,看不出强制转换是必要的,这只是一个错误。