ArrayList.add выбрасывает ArrayIndexOutOfBoundsException
Я пытаюсь добавить объект в ArrayList и его метать ArrayIndexOutOfBoundsException
Ниже приведен код
private void populateInboxResultHolder(List inboxErrors){
inboxList = new ArrayList();
try{
inboxHolder = new InboxResultHolder();
//Lots of Code
inboxList.add(inboxHolder);
}catch(Exception e){
e.printStackTrace();
}
}
И исключение составляет
[3/7/12 15:41:26:715 UTC] 00000045 SystemErr R java.lang.ArrayIndexOutOfBoundsException
[3/7/12 15:41:26:721 UTC] 00000045 SystemErr R at java.util.ArrayList.add(ArrayList.java:378)
[3/7/12 15:41:26:721 UTC] 00000045 SystemErr R at com.ml.fusion.ui.common.web.bean.inbox.InboxSearchBean.populateInboxResultHolder(InboxSearchBean.java:388)
[3/7/12 15:41:26:721 UTC] 00000045 SystemErr R at com.ml.fusion.ui.common.web.bean.inbox.InboxSearchBean.searchInboxErrors(InboxSearchBean.java:197)
[3/7/12 15:41:26:721 UTC] 00000045 SystemErr R at com.ml.fusion.ui.common.web.bean.inbox.InboxSearchBean.viewInbox(InboxSearchBean.java:207)
Но согласно сигнатуре ArrayList.add, это не должно исключать это исключение.
Пожалуйста, помогите.
Ответы
Ответ 1
ArrayList.add()
никогда не должен генерировать ArrayIndexOutOfBoundsException
если используется "правильно", поэтому кажется, что вы используете ArrayList
способом, который он не поддерживает.
Трудно отличить только тот код, который вы разместили, но я предполагаю, что вы обращаетесь к ArrayList
из нескольких потоков.
ArrayList
не синхронизирован и не является потокобезопасным. Если это проблема, вы можете исправить ее, обернув свой List
с помощью Collections.synchronizedList()
.
Изменение кода на следующее должно решить проблему:
private void populateInboxResultHolder(List inboxErrors){
List inboxList = Collections.synchronizedList(new ArrayList());
try{
inboxHolder = new InboxResultHolder();
//Lots of Code
inboxList.add(inboxHolder);
}catch(Exception e){
e.printStackTrace();
}
}
Ответ 2
Код, который вы отправили, не будет генерировать ArrayIndexOutOfBoundsException.
Исключением, которое вы получаете, бросается в ту часть, которую вы пропустили. Взгляните на ваш стек. Его InboxSearchBean вызывает исключение. Скорее всего, он выполняет get (index) в списке с недопустимым индексом.