2016-12-07 27 views
4

在下面的代码:牛逼存在类型变量(一个或多个)的任何实例(S),使列表<T>符合整型

return new HashSet<>(namedParameterJdbcTemplate.query(
    SOME_SQL_QUERY_STRING, 
    parametersMap, 
    (resultSet, rowNum) -> resultSet.getBigDecimal("GETID") 
)); 

我得到(resultSet, rowNum) -> resultSet.getBigDecimal("GETID"))下一个红线以下错误:No instance(s) of type variable(s) T exist so that List<T> conforms to Integer 。有人可以帮助我,并告诉为什么会发生这种情况吗?

+0

不包含的resultSet什么类型克服了这个错误?它可能不是数字 – recurf

+1

您可能需要指定“query”函数的通用参数:(...)namedParameterJdbcTemplate。 (...)查询(......) –

+0

我的猜测是在使用'query()'的不同重载时使用的lambda结果超出了你的预期 - 检查它使用了哪个超载 –

回答

2

根本问题是推断(基于代码)不同的(不需要的)重载版本的“查询”方法,并且作为第三个参数给出的lambda(函数)不适用于此版本的“查询” 。

解决这个问题的方法是“逼”你想查询功能通过提供类型参数为这样:

return new HashSet<>(namedParameterJdbcTemplate.<BigDecimal>query(... 
+8

为了将来的参考,这被称为_type witness_。 – Rogue

0

添加一个明确铸造你的方法调用

在我的情况下,我有

<T> Map<String, T> getMap(@NotNull String rootPath, @NotNull Class<T> type) 

和我用它就像

LinkedHashMap<String,String> x = xmlRegestryFile.getMap("path/to/map/of/string", String.class) 

但失败了,给了我的错误,所以我加入铸造

x = (LinkedHashMap<String, String>) xmlRegestryFile.getMap("my/path", String.class) 
相关问题