2013-03-09 79 views
0

我已经成功完成了Visual Basic的这一工作,我只想知道是否有一种简单的方法可以用Java来完成此工作。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是一个strickly基类。

Partical派生自GameEntity类。

我想让for循环做的是迭代GameEntity的Collection并从Collection中挑选所有的Partical类。

我的问题是我得到一个“不兼容类型”错误。我意识到他们是不同的类型。

+1

你知道'instanceof'吗? – 2013-03-09 19:42:59

回答

0

尝试:

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

你需要遍历&检查所需的类类型:

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

Java有一个类型检查,你可以使用instanceof来检查,如果一个类型例如:一些其他超级类型的实例,例如:

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