Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 向数组添加子类的泛型_Java_Generics_Inheritance - Fatal编程技术网

Java 向数组添加子类的泛型

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

我有一个类B,它扩展了aA存储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{}
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); 
    } 
}