【发布时间】:2012-12-27 16:30:54
【问题描述】:
我有课程 A、B、C 和 D 其中 B 扩展 A、C 扩展 A 和 D 扩展 A。
我有以下ArrayLists,每个都有一些元素:
ArrayList<B> b;
ArrayList<? extends A> mix = b;
我打算让变量mix 包含B、C 或D 类型的元素。我尝试将C 类型的元素添加到mix 中,如下所示:
mix.add(anElementOfTypeC);
但 IDE 不允许我这样做,它说:
anElementOfTypeC 不能通过调用方法转换为 CAP#1 转换,其中 CAP#1 是一个新的类型变量: CAP#1 extends A from 捕获?扩展 A
我是否正确使用了<? extends A>?我该如何解决这个问题?
【问题讨论】:
-
从您的代码提取中,
mix实际上是ArrayList<B>这里... -
在你的研究过程中——如果你做了一些,你有没有通过这个 SO 问题——stackoverflow.com/questions/1910892/… ?