2012-05-19 3 views
1

Происходит нечто ужасное.Целое - это строка - как это может быть?

У меня есть

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 

То же самое для ИНТ а = ... Как это может быть?

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); 

Что мне здесь не хватает?

UPDATE: Виновник линия

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

Это фрагмент связан с Spring MVC, где она будет заселена из формы, кажется, что весна не может добавлять собственные типы в ArrayList.

Любое интересно, либо использовать методы int [] или HttpServlet (хотя бы дополнительный код).

+3

Это наоборот - Integer is *** not *** a String. Проверьте это: activityToDelete - это не то же самое, что и activityIdsToDelete, и он содержит объекты Strings, а не Integer. Это не более чем основная ошибка с вашей стороны, которую мы все часто делаем. Так что никакого пота - исправить. –

+3

Вам не хватает кода, который показывает, как вы заполняете activityToDelete. –

+0

Извините, что это опечатка, которую я сделал здесь, в коде, как и должно быть (спасибо I'l update) – Aubergine

ответ

0

Я думаю, что проблема

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

intValue() превращает Integer в междунар. Int не является объектом, поэтому он должен превратить его в объект для его хранения, и я думаю, что его выбрали toString. Попробуйте

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

Нет, Java не будет произвольно изменять int в String, и кроме того, ошибка возникает перед этой строкой. –

+1

Да, воздушный корабль верен, см. Мой комментарий в комментариях к основному сообщению. Контроллер контроллера Spring добавляет входной сигнал формы как String к ArrayList, работая обычно с int [] – Aubergine

+0

О своей Spring - это новая информация. – Julian

Смежные вопросы