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

Java-用于基类集合中的每个派生类,java,collections,for-loop,each,Java,Collections,For Loop,Each,我已经用VisualBasic成功地做到了这一点,我只想知道是否有一种简单的方法可以用Java实现这一点 我需要一个For循环,该循环将遍历基类集合中的派生类 public class Game{ private Collection<GameEntity> entities; // Methods would go here to control GameEntity's private abstract class GameEntity{

我已经用VisualBasic成功地做到了这一点,我只想知道是否有一种简单的方法可以用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

                }
            }
        }
    }
}
公共类游戏{
私人收藏实体;
//方法可以在这里控制GameEntity的
私有抽象类GameEntity{
受保护的游戏所有者;//定义游戏拥有此实体的实例
公共游戏实体(游戏所有者){
这个。所有者=所有者;
}
公共摘要无效勾号();
}
私有类particial扩展了GameEntity{
公众参与者(游戏所有者){
超级(业主);
}
公共空白勾号(){
对于(particial p:owner.entities){//这是我的问题
如果(p!=这个){//不要自己做物理
}
}
}
}
}
好的,这里我有一个游戏类,它有一个GameEntity的集合,但是GameEntity是一个严格意义上的基类

Partical派生自GameEntity类

我想要for循环做的是迭代GameEntity的集合,并从集合中挑选出所有的特殊类

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

                }
            }
        }
    }
}

我的问题是出现了“不兼容类型”错误。我知道它们是不同的类型。

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

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

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

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
        }
    }
}
尝试:

尝试:


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

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

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

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

您知道
instanceof
?您知道
instanceof