在此循环中,我遍历类型为Entity的ArrayList,其中包含Entity类型的对象以及Projectile类型的对象,该对象扩展了Entity。如果对象是Projectile的实例,我希望执行以下代码。但是,getVelocity()方法仅在子类Projectile中,而不在Entity中。因此,我无法编译以下代码。

我可以考虑解决此问题的方法,例如使用单独的ArrayLists。但是,重点是将所有实体保留在全局列表中,而不是将它们分开。是否有解决此问题的简单方法,还是需要更改代码的结构?

for (Entity f: glo.getList()) {
           if (f instanceof Projectile)
              f.setX(f.getVelocity()/rawFPS);
        }

最佳答案

您必须将其强制转换为Projectile才能进行编译。试试这个:

for (Entity f: glo.getList()) {
           if (f instanceof Projectile)
              f.setX(((Projectile)f).getVelocity()/rawFPS);
        }


发生这种情况是因为java总是检查对象声明为的类型;您的情况是Entity

您可能想要添加@SuppressWarnings("unchecked"),以便您的IDE和任何读取您的代码的人都知道,未经检查的强制转换是有意的。

07-26 07:05