在此循环中,我迭代 Entity
类型的 ArrayList,其中包含 Entity 类型的对象以及扩展 Entity 的 Projectile 类型的对象。如果对象是 Projectile 的实例,我希望执行以下代码。但是,getVelocity()
方法仅在子类 Projectile 中存在,在 Entity 中不存在。所以我无法编译下面的代码。
我可以想出解决这个问题的方法,例如使用单独的ArrayList。然而,重点是将所有实体保留在全局列表中,而不是将它们分开。这个问题有一个简单的解决方案吗,还是我需要更改代码结构?
for (Entity f: glo.getList()) {
if (f instanceof Projectile)
f.setX(f.getVelocity()/rawFPS);
}
最佳答案
这似乎是一个循环,每次游戏引擎运行时都会以某种方式更新您的实体。
在我看来,更干净的解决方案是:
class Entity {
...
public void update() {}
...
}
class Projectile extends Entity {
...
@Override
public void update() {
setX(velocity/rawFPS);
}
...
}
我不知道您的架构,您可能需要也可能不需要将 rawFPS
传递给 update()
。 (正如 @Naveen 非常正确地指出的那样,这不是很干净,所以如果可以的话避免它)。此外,如果您的实体
是抽象的,本身没有任何功能,请首先考虑将其设为接口(interface)
。
关于java - Java中迭代父类ArrayList时使用子类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14421259/