我在JAVA中有一个名为ListItem的接口和一个名为Folder的类来实现它。 我有一个文件夹列表,我想将它传递给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();
}
对于强制转换,我将参数更改为List of?扩展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的列表。 为什么?
答案 0 :(得分:3)
很简单,List<? extends ListItem>
是很多不同类型的超类型,包括List<ListItem>
,List<FancyListItem>
,List<SuperExtraFancyListItem>
等等,假设FancyListItem
和SuperExtraFancyListItem
是ListItem
的子类型。
现在,您的代码尝试执行的操作是将ListItem
添加到可能是List<SuperExtraFancyListItem>
的列表中。这样做真的没有意义 - 这是一个列表,其元素应该是SuperExtraFancyListItem
个对象,而不仅仅是普通的ListItem
。