我有课A
, B
, C
和 D
在哪里 B
延长 A
, C
延长 A
和 D
延长 A
.
我有以下 ArrayList
s 每个都有一些元素:
ArrayList<B> b;
ArrayList<? extends A> mix = b;
我打算使用变量 mix
包含 B
类型的元素, C
或 D
.我尝试添加类型为 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/