2015-05-08 134 views
-2

运行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)) 

为什么我会得到此异常?为什么设置和然后集合有一个对象,我的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() { .. } 

其实我只注意到我在配置文件中定义两个bean,并返回的值是另一个bean的值,它是Map<Long, List<Long>>。然而,它有一个完全不同的bean名称,所以我不明白为什么这个资源拉错了bean。

+3

该错误似乎不言自明:“this.setOfStringsByLong.get(3L)”或者1)未能返回集合,和/或2)未能将Long元素转换为String元素。对? – FoggyDay

+1

你能给我们一些关于setOfStringsByLong的更多细节吗?那种返回类型是什么?你可以分享setOfStringsByLong的源代码/ API吗? –

+0

寻求调试帮助的问题(“为什么这个代码不工作?”)必须包含所需的行为,特定的问题或错误以及在问题本身中重现它所需的最短代码。 –

回答

0

这是由于我在我的配置文件中定义的两个bean都使用了相同的bean名称。我最初错过了这个,因为它们是两个不同的枚举。有趣的是,Spring试图将Map<Long,List<Long>>作为Map<Long,List<String>>传递给我,直到我试图将该List作为列表处理,最终它有一个运行时异常。