Java 为什么要传递临时创建的HashMap<&燃气轮机;数组作为参数不明确?

Java 为什么要传递临时创建的HashMap<&燃气轮机;数组作为参数不明确?,java,generics,ambiguous,Java,Generics,Ambiguous,考虑下面这个类示例: 公共类MyDAO扩展了NamedParameterJDBCDAO支持 { 公共int add(HashMap映射) { getNamedParameterJdbcTemplate().batchUpdate( “插入…”, mapping.keySet().stream().map(t->newhashmap()) {{ //根据t向映射中添加一些键/值对 }} ).toArray(HashMap[]::new)); } } 我的IDE(IntelliJ)可以使用这个构造

考虑下面这个类示例:

公共类MyDAO扩展了NamedParameterJDBCDAO支持
{
公共int add(HashMap映射)
{
getNamedParameterJdbcTemplate().batchUpdate(
“插入…”,
mapping.keySet().stream().map(t->newhashmap())
{{
//根据t向映射中添加一些键/值对
}}
).toArray(HashMap[]::new));
}
}
我的IDE(IntelliJ)可以使用这个构造,但是通过maven编译它会产生一个编译错误,表示对batchUpdate的引用不明确。有两种可用的
batchUpdate()
方法:

  • batchUpdate(字符串,映射[])
  • batchUpdate(字符串,SqlParameterSource[])
看起来编译器只是“看到”了一个数组,但lambda构造显然生成了一个HashMap,因此应该选择第一个方法。当我在调用
batchUpdate()
之前创建HashMap并将其作为参数传递时,编译器错误不会显示

HashMap[]批处理值=…;//同样的lambda结构
getNamedParameterJdbcTemplate().batchUpdate(“插入…”,BatchValue);

这里发生了什么,为什么会这样?这两种方法在语法上都应该是有效的。

IntelliJ是否配置为使用与maven使用的Java编译器相同的版本?@dasblinkenlight:是。它只是安装的JDK的一个版本
javac-version
产生
1.8.0_66
。IntelliJ是否配置为使用与maven使用的相同版本的Java编译器?@dasblinkenlight:Yes。它只是安装的JDK的一个版本
javac-version
产生
1.8.0\u 66