Ошибка при преобразовании списка объектов в список интерфейса
У меня есть интерфейс в 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
объекты, а не просто обычные ListItem
s.