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: