Java 向数组添加子类的泛型
我有一个类B,它扩展了aA存储AItem的列表和B存储BItem的列表 在“A”中,我有一个ArrayList,它使用[?扩展AItem] 我假设这意味着我可以将此ArrayList用于扩展AItem的任何类型的对象 所以在我的B类中,我有一个add(..)方法,它将一个BItem添加到项中 我认为这是可行的,因为items arrayList可以保存从AItem扩展的任何对象的列表Java 向数组添加子类的泛型,java,generics,inheritance,Java,Generics,Inheritance,我有一个类B,它扩展了aA存储AItem的列表和B存储BItem的列表 在“A”中,我有一个ArrayList,它使用[?扩展AItem] 我假设这意味着我可以将此ArrayList用于扩展AItem的任何类型的对象 所以在我的B类中,我有一个add(..)方法,它将一个BItem添加到项中 我认为这是可行的,因为items arrayList可以保存从AItem扩展的任何对象的列表 import java.util.ArrayList; class A { public ArrayL
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{}
import java.util.ArrayList;
甲级{
公共ArrayList您可能不需要在这里使用泛型。在类A
中具有类型AItem
的列表应该可以(对于最佳实践,我也会将其声明为类型list
,而不是ArrayList
):
尝试将extends
替换为super
import java.util.ArrayList;
class A {
public ArrayList<? super 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{}
import java.util.ArrayList;
甲级{
公共阵列列表您可以使用
public ArrayList<? super AItem> items;
jvm不知道列表中实际会出现什么
您可以泛化一个类
class A<T> {
public ArrayList<T> items;
}
A类{
公共阵列列表项;
}
然后将B类定义为
public class B extends A<BItem>{
public void add(BItem i) {
this.items.add(i);
}
}
公共类B扩展了{
公共无效添加(BItem i){
本.项目.添加(i);
}
}
您无法将项目添加到未知类型的列表中可能会重复一个非常好的问题。我一直在等待答案,但我认为您需要使用某个类初始化arrayList。您需要使用arrayList
public class B extends A{
.....
public BItem getOne(int idx) {
return this.items.get(idx);
}
}
class A<T> {
public ArrayList<T> items;
}
public class B extends A<BItem>{
public void add(BItem i) {
this.items.add(i);
}
}