运行Java 1.8(和Spring 4.0一起负责部分接线),我有以下代码:
public void doStuff(String color, Collection<String> ids) {
for (String id : ids) {
在最后一行,我得到了例外:
java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.String
集合的toString返回:[521356090]
从这段代码传递给这个方法:
doStuff("green", this.regionToIds.get(3L))
为什么我会收到此异常?为什么Set和then集合有一个对象,我的foreach循环有问题?
此类作为资源连接:
private Map<Long, Set<String>> regionToIds;
@Resource(name = Config.REGION_TO_IDS)
public void setRegionToIds(
final Map<Long, Set<String>> regionToIds) {
this.regionToIds = regionToIds;
}
配置文件如下所示:
@Bean(name = REGION_TO_IDS)
public Map<Long, Set<String>> getRegionToIds() { .. }
我实际上只是注意到我在Config文件中定义了两个bean,并且返回的值是另一个bean的值,即Map<Long, List<Long>>
。但是,它有一个完全不同的bean名称,因此我不明白为什么该资源会引入错误的bean。
答案 0 :(得分:1)
这是因为我在配置文件中定义的两个bean使用相同的bean名称。我最初错过了这个,因为它们是两个不同的枚举。有趣的是,spring设法将Map<Long,List<Long>>
作为Map<Long,List<String>>
传递,直到我尝试将List作为List处理,最后它有一个运行时异常。