2015-05-08 4 views
-2

Запуск Java 1.8 (и Spring 4.0, который отвечает за некоторые из этих проводов), у меня есть следующий код:Java - класс литая исключение из неправильного типа

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, а затем на коллекции есть объект, с которым связана моя петля 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, и возвращаемое значение является значением другого компонента, который является Map<Long, List<Long>>. Однако у него есть совершенно другое имя компонента, поэтому я не понимаю, почему этот ресурс втягивает неправильный компонент.

+3

Ошибка кажется довольно понятной: 'this.setOfStringsByLong.get (3L)' либо 1), не смог вернуть коллекцию и/или 2), не сумев преобразовать длинный элемент в элемент String. Правильно? – FoggyDay

+1

Можете ли вы дать нам более подробную информацию о setOfStringsByLong? Каков тип возвращаемого результата? Можете ли вы поделиться источником/API для setOfStringsByLong? –

+0

Вопросы поиска справки по отладке («почему этот код не работает?») Должны включать в себя желаемое поведение, конкретную проблему или ошибку и кратчайший код, необходимый для воспроизведения в самом вопросе. –

ответ

0

Это было вызвано использованием одного и того же имени бобов для обоих компонентов, определенных мной в файле конфигурации. Я изначально пропустил это, потому что они были двумя разными перечислениями. Интересно, что весной удается пройти по Map<Long,List<Long>> как Map<Long,List<String>>, пока я не попытаюсь обработать этот Список как Список, где он, наконец, имеет исключение во время выполнения.

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