不存在类型变量T的实例,以便List <T>符合Integer

cno*_*ova 8 java generics lambda type-inference

在以下代码中:

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

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

Ovi*_*lha 7

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

解决此问题的一种方法是通过提供类型参数来“强制”您想要的查询功能:

return new HashSet<>(namedParameterJdbcTemplate.<BigDecimal>query( ...
Run Code Online (Sandbox Code Playgroud)

  • 为了将来参考,这被称为_类型见证_。 (14认同)