【发布时间】:2017-06-26 19:49:05
【问题描述】:
我在 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 列表。 为什么?
【问题讨论】:
-
记住接口和类的区别。你不扩展接口,你实现它。 extends 这个词是指父类到子类。
-
不应该
items.add(item);是this.items.add(item);? -
@Eran 是的,你是对的,谢谢你!
-
您不能向其中添加 ListItem,因为真正的泛型可能是 ListItem 的子类 (
? extends ListItem)。您可能想要做的是将项目添加到您的成员变量items,您可以通过this.items访问它。
标签: java android interface casting wildcard