Ошибка при преобразовании списка объектов в список интерфейса

У меня есть интерфейс в JAVA под названием ListItem и класс Folder, который его реализует. У меня есть список папок, который я хочу передать его в метод с аргументом List of ListItem. вот этот метод:

List<ListItem> items = new ArrayList<>();
public void addAll(List<ListItem> items) {
    this.items.beginBatchedUpdates();
    for (ListItem item : items) {
        items.add(item);
    }
    this.items.endBatchedUpdates();
}

Для приведения я изменил аргумент на Список? расширяет ListItem:

public void addAll(List<? extends ListItem> items) {
    this.items.beginBatchedUpdates();
    for (ListItem item : items) {
        items.add(item);
    }
    this.items.endBatchedUpdates();
}

Теперь нет никакой ошибки при передаче параметра, но у меня есть ошибка в items.add (item), которая говорит, что вы не можете добавить? расширить ListItem в список ListItem. Зачем? ошибка

1 ответ

Очень просто, List<? extends ListItem> это супертип целого ряда различных типов, в том числе List<ListItem>, List<FancyListItem>, List<SuperExtraFancyListItem> и так далее, при условии FancyListItem а также SuperExtraFancyListItem являются подтипами ListItem,

Теперь, что ваш код пытается сделать, это добавить ListItem в список, который может быть List<SuperExtraFancyListItem>, Это действительно не имеет смысла делать это - это список, элементы которого должны быть SuperExtraFancyListItem объекты, а не просто обычные ListItems.

Другие вопросы по тегам