我有一个简单的类结构:
class BaseModel {}
class Performer extends BaseModel {}
我有一个Performer的集合:
ArrayList<Performer> list = loadPerformerList();
为什么我不能这么做?
functionThatNeedsArrayOfBase( (ArrayList<BaseModel>)list );
或者,我如何才能正确地做到这一点?
发布于 2012-06-07 03:35:48
子元素的集合不是基元素的集合。否则,你可能会将基础对象添加到你的子集合中,打破了这个假设(反过来也是一样的)。
您可以将函数的参数指定为包含base的派生的列表:
void functionThatNeedsArrayOfBase(ArrayList<? extends BaseModel> list) {
//...
}然后,您可以直接传递list,而不进行强制转换
发布于 2012-06-07 03:36:36
试试这个:<? extends BaseModel>,它没有说明BaseModel的哪个子类,只是说它是一个特定的子类。另请参阅<? super BaseModel>,具体取决于您的需求。
发布于 2012-06-07 03:34:56
list是Performer(s)的ArrayList。如果java允许您将其转换为ArrayList<BaseModel>,那么此时的列表也只包含BaseModel(s),如果将一个表演者添加到不是BaseModel的列表中,会发生什么?如果我们允许这样做,我们就会失去类型安全性。
https://stackoverflow.com/questions/10920877
复制相似问题