Java - Cast ArrayList Up Hierarchy

Jos*_*osh 3 java polymorphism casting

我有一个简单的类结构:

class BaseModel {}

class Performer extends BaseModel {}

我有一个Performers 的集合:

ArrayList<Performer> list = loadPerformerList();

为什么我不能这样做?

functionThatNeedsArrayOfBase( (ArrayList<BaseModel>)list );

或者,我该怎么做呢?

Att*_*ila 10

儿童的集合不是基础的集合.否则,您可以将基础对象添加到您的子集合中,从而打破假设(同样反过来).

您可以将函数的参数指定为包含base派生词的列表:

void functionThatNeedsArrayOfBase(ArrayList<? extends BaseModel> list) {
  //...
}
Run Code Online (Sandbox Code Playgroud)

然后你就可以在list没有施法时通过