代码清单:
protected List<R> getRows(String startDate, String endDate, Function<MapListHandler, R> func){
ConnectionManager cm = new ConnectionManager();
List<R> rows = null;
try(Connection c = cm.getConnection()) {
String sql = getSql();
rows = new QueryRunner()
.query(c, sql, new MapListHandler(), startDate, endDate, startDate, endDate)
.stream()
.map(func).collect(Collectors.toList());
} catch (SQLException e) {
e.printStackTrace();
}
finally {
cm.closeConnection();
}
return rows;
}
无法使用以下消息进行编译:
接口java.util.stream.Stream中的方法映射&lt; T&gt;不能适用于给定的类型; 需要[ERROR]:java.util.function.Function&lt;? super java.util.Map&lt; java.lang.String,java.lang.Object&gt; ,?扩展R> [ERROR] found:java.util.function.Function&lt; org.apache.commons.dbutils.handlers.MapListHandler,R&gt; [错误]原因:无法推断类型变量(R) [ERROR](参数不匹配; java.util.function.Function&lt; org.apache.commons.dbutils.handlers.MapListHandler,R&gt;无法转换为java.util.function.Function&lt;?super java.util.Map&lt; java .lang.String,java.lang.Object&gt; ,? extends R&gt;)
答案 0 :(得分:0)
MapListHandler
将导致查询返回List<Map<String, Object>>
。
这意味着stream()
将返回Stream<Map<String, Object>>
。因此,其map()
方法期望使用Function<? super Map<String, Object>, ? extends R>
。
当然,MapListHandler
不是Map<String, Object>
的超类型,因此func
不是map()
的有效参数。