当前位置: 首页 > 知识库问答 >
问题:

向数组中添加子类的泛型

支华池
2023-03-14

我有一个扩展a的类B。a存储一个Item的列表,B存储一个BItem的列表

在“a”中,我有一个使用[?extends AItem]的ArrayList。

我假设这意味着我可以将这个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{}

共有1个答案

杜砚
2023-03-14

这里可能不需要使用泛型。在类A中拥有AItem类型的列表应该很好(为了最佳实践,我还将声明它为list类型,而不是ArrayList):

class A {
    public List<AItem> items;
}

class B extends A {

    public void add(BItem i) {

        this.items.add(i);
    } 
}

的问题是什么?extends aItem是指编译器不能保证元素的实际类型是aItembitem。它可能是另一个子类citem,在这种情况下,类型安全被破坏。

使用泛型设计类层次结构的另一种方法是,在父类中设置类型参数,并将其设置为扩展类b中的适当子类(bitem):

class A<T extends AItem> {
    public ArrayList<T> items;
}

class B extends A<BItem>{

    public void add(BItem i) {

        this.items.add(i);
    } 
}
 类似资料:
  • 注意:“else”语句只是出于测试目的,似乎表明if语句没有正常工作,因为当我测试时,它总是被触发。

  • 当我将Decimal(x)值追加到数组时,我希望只得到数字,但它还包括在元素开头的Decimal()函数调用。 代码: 输出:

  • 问题内容: 我正在尝试创建一个泛型类型的数组。我收到错误消息: 我很困惑。任何线索为什么会这样。 问题答案: 其背后的原因是,您不能创建通用或参数化类型的数组,而只能 创建可验证的 类型(即可以在运行时推断出的类型)。 尽管可以将此类数组类型 声明 为变量或方法参数。这有点不合逻辑,但这就是Java的样子。 Java泛型和集合在第6章中广泛讨论了此问题和相关问题。

  • 我想在表的第二列中追加 。输出应为 我不想使用,因为我需要在我的实际问题中追加嵌套的div。我制作了同样的小示例。JsFiddle

  • 问题内容: 假设我有一个数组,例如: 然后我想将一个元素推/追加到所述数组的末尾,以获得: 我应该使用哪种方法? 那我想在数组的 前面 添加一个元素呢?是否有固定的时间班次? 问题答案: 从 Swift 3/4/5开始 ,操作如下。 向数组末尾添加新元素。 将另一个数组附加到数组的末尾。 向您的数组中插入一个新元素。 将另一个数组的内容插入到数组中。 更多信息可以从第110页开始的“ Swift编

  • 我试图让用户输入日期来存储它,但我似乎无法将其记录下来。 当我试图将创建的对象添加到数组时,问题就来了。 以下是另一个类,以供setDay,setMonth,setyear参考:public class OurDate{private int day;private int month;private int year;