【问题标题】:Integer is String - how can that be?整数是字符串 - 那怎么可能?
【发布时间】:2012-05-19 22:41:17
【问题描述】:

发生了严重的错误。

我有

ArrayList<Integer> activitiesToDelete;

我需要准备要传递给 Spring jdbcTemplate 的对象数组。然而,由于某种原因,ArrayList 中的元素被视为 String,因此在 jdbcTemplate 的执行点中断,抱怨它无法从 String 转换为 int。然后我尝试在循环中进行转换,看看是否有帮助:-\ 而且我显然不能做 Integer.parseInt,因为 IDE 将它正确地视为 Integer。每当我分配 Integer a = activitiesToDelete.get(i);它给了我:

java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer

同样适用于 int a = ... 怎么可能?

 Object [] objectList = new Object [activitiesToDelete.size()];

    for (int i = 0; i < activitiesToDelete.size(); i++) {

    Integer a = activitiesToDelete.get(i);

        logger.info(String.valueOf(activitiesToDelete.get(i)));

        objectList[i] = activitiesToDelete.get(i).intValue();
}

    jdbcTemplate.update(sql, objectList);

我在这里错过了什么?

更新:罪魁祸首

  @RequestMapping(value="/activities/delete", method = RequestMethod.POST) public String deleteActivities(@RequestParam("activityId") ArrayList <Integer> activitiesToDelete) 

这是一个与 Spring MVC 相关的 sn-p,它从表单中填充,似乎 Spring 无法向 ArrayList 添加正确的类型。

任何人都想知道,要么使用 int[] 或 HttpServlet 方法(虽然是额外的代码)。

【问题讨论】:

  • 反过来——整数是不是字符串。检查一下:activityToDelete 与activityIdsToDelete 不同,它保存的是String,而不是Integer 对象。这只不过是您的一个基本错误,我们都经常这样做。所以没有汗水 - 修复它。
  • 您缺少显示如何填充activityToDelete 的代码。
  • 它仍然保存字符串。仔细检查你用物体填充它的位置。此 JVM 错误消息很少出错。
  • 我想我确实找到了。这发生在我在 cmets 中为控制器处理程序提供的行上。好像Spring Framework添加了String,无法区分ArrayList的类型。这是我第一次尝试使用更复杂的数据结构。它与 int[] 完美配合。有谁知道我可以使用除普通数组之外的数据结构来使用 Spring 捕获表单输入的方式吗?我仍然可以使用 HttpServlet getParameter 或 getAttribute,但使用 spring 会更好。
  • 感谢您回复我们并发布您对问题的隔离及其解决方案。您可能还想将其发布为“答案”。 1+

标签: java


【解决方案1】:

我认为问题是

objectList[i] = activitiesToDelete.get(i).intValue(); 

intValue() 将 Integer 转换为 int。 int 不是 Object,所以它必须把它变成一个 Object 来存储它,我认为它选择了 toString。试试

objectList[i] = activitiesToDelete.get(i); 

【讨论】:

  • 不,Java不会随意将int变成String,而且错误发生在这一行之前。
  • 是的,气垫船是正确的,请参阅我在 cmets 中的主要帖子评论。 Spring 控制器处理程序将表单输入作为字符串添加到 ArrayList,同时使用 int [] 正常工作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-16
  • 1970-01-01
  • 1970-01-01
  • 2011-02-06
  • 1970-01-01
  • 2020-09-25
  • 2019-05-02
相关资源
最近更新 更多