【发布时间】:2012-10-20 15:43:34
【问题描述】:
我第一次尝试番石榴,我发现它真的很棒。
我在 Spring jdbc 模板上执行了几个参数化检索查询。 DAO (AbstractDataAccessObject) 中的方法是这样的。这里没问题。
public Map<String,Object> getResultAsMap(String sql, Map<String,Object> parameters) {
try {
return jdbcTemplate.queryForMap(sql, parameters);
} catch (EmptyResultDataAccessException e) {
//Ignore if no data found for this query
logger.error(e.getMessage(), e);
}
return null;
}
问题来了:
当我使用
调用此方法时getResultAsMap(query, new HashMap<String,Object>(ImmutableMap.of("gciList",gciList)));
效果很好。
但是当我这样做时
getResultAsMap(query, Maps.newHashMap(ImmutableMap.of("gciList",gciList)));
编译器不高兴说
The method getResultAsMap(String, Map<String,Object>) in the type AbstractDataAccessObject is not applicable for the arguments (String, HashMap<String,List<String>>)
我是不是做错了什么?或者是什么原因导致了此投诉?
【问题讨论】:
-
可能你应该把 gciList 放在 Object => (Object)gciList 上,然后再把它作为参数
-
正如 mykhaylo 所说,问题在于签名与类型参数不匹配 - 您期望 Map
,但提供 Map > -将列表转换为对象是可行的,但更好的解决方案可能是使用通配符(如果您重用该方法),向辅助方法添加类型参数,或者只是修复签名以要求您实际获得的类型。跨度> -
@mykhaylo 太好了。打字工作。和伟大的建议塞巴斯蒂安。我应该介绍一个类型参数。但是告诉我一件事,为什么 List
不能容纳在 Object 中? -
@ArunManivannan 它不能那样工作,因为你会得到一个 Map
,你可以在其中添加任意对象,但是它应该只包含字符串列表!它应该适用于 Map - 因为这可以被分配一个 Map >... -
@Sebastian 很好地解释了。非常感谢
标签: java spring collections guava