Как удалить элемент из java.util.List? - PullRequest
9 голосов
/ 22 ноября 2010

Каждый раз, когда я использую метод .remove () в java.util.List, я получаю сообщение об ошибке UnsupportedOperationException. Это сводит меня с ума. Приведение к ArrayList не помогает. Как это сделать?

@Entity
@Table(name = "products")
public class Product extends AbstractEntity {

    private List<Image> images;

    public void removeImage(int index) {
         if(images != null) {
            images.remove(index);
         }
    }
}

StackTrace:

java.lang.UnsupportedOperationException
java.util.AbstractList.remove(AbstractList.java:144)
model.entities.Product.removeImage(Product.java:218)
    ...

Я вижу, что мне нужно использовать более точный класс, чем интерфейс List, но все в примерах ORM List используется ...

Ответы [ 3 ]

23 голосов
/ 22 ноября 2010

К сожалению, не все списки позволяют удалять элементы. Из документации List.remove(int index):

Удаляет элемент в указанной позиции в этом списке (необязательная операция) .

Вы ничего не можете с этим поделать, кроме создания нового списка с теми же элементами, что и у исходного списка, и удаления элементов из этого нового списка. Как это:

public void removeImage(int index) {
     if(images != null) {
        try {
            images.remove(index);
        } catch (UnsupportedOperationException uoe) {
            images = new ArrayList<Image>(images);
            images.remove(index);
        }
     }
}
7 голосов
/ 22 ноября 2010

Это просто означает, что базовая реализация List не поддерживает операцию удаления.

ПРИМЕЧАНИЕ: List не обязательно должно быть ArrayList.Это может быть любая реализация, а иногда и пользовательская.

2 голосов
/ 22 ноября 2010

Преобразование вашего списка в список массивов ничего не изменит, сам объект остается списком, и поэтому вы можете использовать только свойства списка

, что вам следует попробовать создать его с новым ArrayList

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...