当前位置: 首页 > 面试题库 >

是否可以在不使用任何特殊语法的情况下,将扩展了A的B类型的值添加到A类型的泛型集合中?

西门品
2023-03-14
问题内容
public class Stack<E> {
    public Stack () {....}
    public void push (E e) {....}
    public E pop () {....}
    public boolean isEmpty(){....}
}

public void pushAll (Collection<E> src) {
    for (E e: src){
        push(e)
    }
}

我不明白如果我写的话会出现什么问题

Stack<number> numberStack = new Stack<Number>();
Collection<Integer> integers=...
numberStack.pushAll(integers);

整数扩展了Number,因此我可以向添加一个整数集合numberStack。但是我被告知这是一个错误编译-为什么?


问题答案:

您的代码指定了它 接受Collection与has具有 相同 类型参数的a Stack

您应该这样编写pushAll方法:

public void pushAll (Collection<? extends E> src)

这意味着,你期望Collection某种 类型的扩展E(即你不关心它是什么具体类型,但它 必须E或某些子类的话)。

看一下的定义Collection.addAll():它的定义方式相同。



 类似资料:
  • 问题内容: 我在列表上使用通配符和下限泛型,但是编译器抛出错误。 码: 错误: 类型List中的方法add(capture#8-of?super Integer)不适用于参数(Number) 使用,应该允许我添加任何类型或其超类型的对象,例如Number或Object。我已经进行了一些SO讨论,但是找不到为什么我应该克服错误。 问题答案: 使用,应该允许我添加Integer类型或其超类型的任何对象

  • 我想使用流从类型B创建类型a的集合。 假设我有两节课 为了从员工集合中创建人员集合,我编写了以下代码 目前,这段代码可以正常工作。但我想知道,是否有更好的方法可以不使用forEach从员工创建人员集合。

  • 问题内容: 如果我有一个通用类: 我想实例化几个项目,例如… …并将它们添加到集合中。如何定义集合,使其可以容纳泛型类型列表?然后,我想在某个时刻迭代集合,并使用Value属性。可能? 问题答案: 让您的泛型类从非泛型基类继承,或实现一个非泛型接口。然后,您可以拥有此类型的集合,并将其转换为用于访问集合内容的任何代码。 这是一个例子。

  • 例如,JPA标准API可以在没有生成元模型的情况下使用。失去了类型安全性,但我可以在运行时仅使用反射来创建查询,而无需事先了解数据模型。我想以同样的方式使用Querydsl。我不关心类型安全问题,因为我不知道数据模型。 在我最近的项目中,我想使用Querydsl,主要是因为它构成了持久性之上的另一层。所以我希望可以在JPA、JDO、JDBC、Lucene、Hibernate Search、Mong

  • 问题内容: 我是Java泛型的新手,来自.NET世界,我习惯于编写这样的方法: 该方法接受通用类型的对象,并检查该对象是否实现通用接口的 特定 版本,在这种情况下为。 现在,在Java中,我可以执行以下操作: 但 Java并 没有 让我做 据我所知,由于类型擦除,通常在Java中,此类将由类对象处理,我们将执行以下操作: 但是由于我要检查的类型是通用接口,所以您不能这样做: 那么,如何在Java中

  • 问题内容: 是否可以为特殊/构造的泛型类型扩展泛型类?我想使用一种方法来扩展Int Arrays,以计算其元素的总和。 例如 问题答案: Swift 5.x: