首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java - Cast ArrayList Up Hierarchy

Java - Cast ArrayList Up Hierarchy
EN

Stack Overflow用户
提问于 2012-06-07 03:30:38
回答 5查看 366关注 0票数 3

我有一个简单的类结构:

class BaseModel {}

class Performer extends BaseModel {}

我有一个Performer的集合:

ArrayList<Performer> list = loadPerformerList();

为什么我不能这么做?

functionThatNeedsArrayOfBase( (ArrayList<BaseModel>)list );

或者,我如何才能正确地做到这一点?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-06-07 03:35:48

子元素的集合不是基元素的集合。否则,你可能会将基础对象添加到你的子集合中,打破了这个假设(反过来也是一样的)。

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

代码语言:javascript
复制
void functionThatNeedsArrayOfBase(ArrayList<? extends BaseModel> list) {
  //...
}

然后,您可以直接传递list,而不进行强制转换

票数 10
EN

Stack Overflow用户

发布于 2012-06-07 03:36:36

试试这个:<? extends BaseModel>,它没有说明BaseModel的哪个子类,只是说它是一个特定的子类。另请参阅<? super BaseModel>,具体取决于您的需求。

票数 2
EN

Stack Overflow用户

发布于 2012-06-07 03:34:56

list是Performer(s)的ArrayList。如果java允许您将其转换为ArrayList<BaseModel>,那么此时的列表也只包含BaseModel(s),如果将一个表演者添加到不是BaseModel的列表中,会发生什么?如果我们允许这样做,我们就会失去类型安全性。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10920877

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档