Java - 对于基类集合中的每个派生类

时间:2013-03-09 19:41:14

标签: java collections for-loop each

我已经使用Visual Basic成功完成了这项工作,我只是想知道是否有一种简单的方法可以用Java来完成。

我想要一个For循环,它将从Base类Collection迭代Derived类。

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类。

我的问题出在哪里,我收到“不兼容的类型”错误。我确实认识到它们是不同的类型。

3 个答案:

答案 0 :(得分:1)

你需要迭代&amp;检查所需的类类型:

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
        }
    }
}

答案 1 :(得分:1)

尝试:

 for(GameEntity entity : owner.entities) {
      if(entity instanceof Partical) {
          Partical partical = (Partical) entity;
      }
 }

答案 2 :(得分:1)

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

 if(entity instanceOf Partical) {
   // do smth
 }