Java 泛型与 ArrayList <?扩展 A> 添加元素

标签 java generics arraylist

我有课A , B , CD在哪里 B延长 A , C延长 AD延长 A .

我有以下 ArrayList s 每个都有一些元素:

ArrayList<B> b;
ArrayList<? extends A> mix = b;

我打算使用变量 mix包含 B 类型的元素, CD .我尝试添加类型为 C 的元素进入 mix像这样:

mix.add(anElementOfTypeC);

但 IDE 不允许我这样做,它说:

anElementOfTypeC cannot be converted to CAP#1 by method of invocation conversion where CAP#1 is a fresh type-variable: CAP#1 extends A from capture of ? extends A

我是否使用了 <? extends A>正确吗?我该如何解决这个问题?

最佳答案

ArrayList<? extends A>表示某种未知类型的 ArrayList,它扩展了 A .
该类型可能不是 C ,所以你不能添加 C到 ArrayList。

事实上,由于您不知道 ArrayList 应该包含什么,因此您无法将 anything 添加到 ArrayList。

如果你想要一个 ArrayList 可以容纳任何继承 A 的类, 使用 ArrayList<A> .

关于Java 泛型与 ArrayList <?扩展 A> 添加元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14306166/

相关文章:

java - 检查泛型方法中的类型

java - 继承和泛型以及 Dagger2

java - arraylist 的保存和读取类

java - 尝试从 ArrayList 中为每个用户打印出来

java - 如何在 java 中使用 Elasticsearch Rest api?

java - Eclipse 的 InitialContext 问题

swift 泛型 : Constraining Argument Types

java - 多维数组列表配对

java - new OnClickListener() 与 new View.OnClickListener()

java - Spring boot2 JPA SQLite的命名策略