【问题标题】:Java - class cast exception from wrong typeJava - 来自错误类型的类转换异常
【发布时间】:2015-05-08 19:43:52
【问题描述】:

运行 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&lt;Long, List&lt;Long&gt;&gt;。但是,它有一个完全不同的 bean 名称,所以我不明白为什么该资源拉入了错误的 bean。

【问题讨论】:

  • 这个错误似乎不言自明:this.setOfStringsByLong.get(3L) 是 1) 未能返回 Collection,和/或 2) 未能将 Long 元素转换为 String 元素。对吗?
  • 你能告诉我们更多关于 setOfStringsByLong 的细节吗?该 get 的返回类型是什么?你能分享 setOfStringsByLong 的源代码/API 吗?
  • 寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。跨度>
  • @HotLicks 感谢您的信息。期望的行为是不抛出异常。

标签: java spring classcastexception


【解决方案1】:

这是由于我在配置文件中定义的两个 bean 使用了相同的 bean 名称。我最初错过了这个,因为它们是两个不同的枚举。有趣的是,spring 设法将Map&lt;Long,List&lt;Long&gt;&gt; 作为Map&lt;Long,List&lt;String&gt;&gt; 传递,直到我尝试将该 List 视为一个 List,它最终出现运行时异常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-01
    • 1970-01-01
    • 2013-02-23
    • 1970-01-01
    • 1970-01-01
    • 2021-02-02
    • 2020-02-12
    • 2022-07-04
    相关资源
    最近更新 更多