【发布时间】:2014-12-20 05:16:15
【问题描述】:
我正在编写一个游戏,有一个称为 GameObject 的抽象类和三个扩展它的类(Player、Wall 和 Enemy)。
我有一个这样定义的列表,其中包含我游戏中的所有对象。
List<GameObject> objects;
当我需要对一个对象做某事时,我会这样做:
public void update() {
for(GameObject o : objects) {
if(o instanceof Wall) {
// do something
}
else if(o instanceof Player) {
// do something
}
else if(o instanceof Enemy) {
// do something
}
}
}
如您所见,我必须遍历整个列表并检查类型才能找到一个对象。在我看来,这似乎不是很有效。于是我想到了将不同的派生类存储在它们自己的列表中。
private List<Wall> walls;
private List<Enemy> enemies;
private Player player; // only one
这会比遍历包含所有内容的整个列表并检查其类型来决定是否做某事更有效吗?非常感谢。
【问题讨论】:
-
一个列表或多个列表无关紧要。您应该考虑为每个对象分配一个标识符并将其存储在
Map实现中以便于检索。 -
我建议您将方法
doSomething()放入GameObject(可能是abstract)然后您可以直接调用o.doSomething()并让实例决定它是什么。或者update()?
标签: java performance arraylist