0

我已经用 Visual Basic 成功地做到了这一点,我只想知道是否有一种简单的方法可以用 Java 做到这一点。

我想要一个 For 循环,它将遍历基类集合中的派生类。

public class Game{
    private Collection<GameEntity> entities;

    // Methods would go here to control GameEntity's

    private abstract class GameEntity{
        protected Game owner; //Defines which instance Game owns this Entity

        public GameEntity(Game owner) {
            this.owner=owner;
        }

        public abstract void tick();
    }

    private class Partical extends GameEntity{
        public Partical(Game owner) {
            super(owner);
        }

        public void tick(){
            for (Partical p : owner.entities) { //HERE IS MY PROBLEM
                if(p != this){ //Don't do physics with itself

                }
            }
        }
    }
}

好的,所以在这里我有我的 Game 类,它有一个 GameEntity 的集合,但 GameEntity 严格来说是一个基类。

Partical 派生自 GameEntity 类。

我想要 for 循环做的是遍历 GameEntity 的集合并从 Collection 中挑选出所有的 Partical 类。

我的问题是我收到“不兼容的类型”错误。我确实意识到它们是不同的类型。

4

3 回答 3

1

尝试:

 for(GameEntity entity : owner.entities) {
      if(entity instanceof Partical) {
          Partical partical = (Partical) entity;
      }
 }
于 2013-03-09T19:45:06.203 回答
1

Java 有类型检查,你可以使用 instanceOf 来检查一个类型是否是其他超类型的实例,例如:

 if(entity instanceOf Partical) {
   // do smth
 }
于 2013-03-09T19:49:26.173 回答
1

您需要迭代并检查所需的类类型:

for (GameEntity e : owner.entities) { //HERE IS MY PROBLEM
    if (e instanceof Partical) {
        Partical p = (Partical)e;
        if(p != this){ //Don't do physics with itself
        }
    }
}
于 2013-03-09T19:44:59.467 回答