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) в списке с недопустимым индексом.