【发布时间】:2017-01-21 06:15:37
【问题描述】:
我有一个扩展 A 的类 B。 A 存储 AItem 列表,B 存储 BItem
列表在“A”中,我有一个 ArrayList,它使用 [?扩展 AItem] .
我假设这意味着我可以将这个 ArrayList 用于扩展 AItem 的任何类型的对象。
所以在我的 B 类中,我有一个 add(..) 方法,可以将 BItem 添加到项目中。
我认为这会起作用,因为 items arrayList 可以保存从 AItem 扩展的任何对象的列表。
import java.util.ArrayList;
class A {
public ArrayList<? extends AItem> items;
}
public class B extends A{
public void add(BItem i) {
this.items.add(i); //compile error here
}
}
//items :
class AItem {}
class BItem extends AItem{}
我该如何让它发挥作用?
我的编译错误如下所示:
类型中的方法add(capture#2-of ? extends AItem) ArrayList 不适用于 参数(BItem)
【问题讨论】:
-
您不能将项目添加到未知类型的列表中
-
非常好的问题。我一直在等待答案,但我认为您需要使用某个类初始化 arrayList。
-
您需要使用
ArrayList<? super AItem>read this获取更多信息。
标签: java generics inheritance