Java Generic with ArrayList <?扩展 A> 添加元素

2022-09-01 08:18:50

我有类 , 和 扩展 、 扩展 和 扩展 。ABCDBACADA

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

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

我打算让变量包含 类型为 , 或 .我试图添加一个类型的元素,如下所示:mixBCDCmix

mix.add(anElementOfTypeC);

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

anElementOfTypeC 不能通过调用转换的方法转换为 CAP#1,其中 CAP#1 是新的类型变量:CAP#1 从捕获 ?扩展 A

我是否正确使用了 ?如何解决此问题?<? extends A>


答案 1

ArrayList<? extends A>表示扩展 的某种未知类型的 ArrayList。
该类型可能不是 ,因此您无法将 添加到 ArrayList。ACC

实际上,由于您不知道 ArrayList 应该包含什么,因此您无法向 ArrayList 添加任何内容

如果需要一个可以保存任何继承的类的 ArrayList,请使用 .AArrayList<A>


答案 2

无法在使用 的集合中添加元素。? extends

ArrayList<? extends A>表示这是扩展 的类型(正好是一个类型)。所以你可以肯定,当你调用方法时,你会得到一些东西A。但是你不能添加一些东西,因为你不知道它到底包含什么。ArrayListAgetArrayList


推荐