【问题标题】:Java - For Each Derived class in a Collection of Base classesJava - 对于基类集合中的每个派生类
【发布时间】:2013-02-25 05:46:49
【问题描述】:

我已经用 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 严格来说是一个 Base 类。

Partical 派生自 GameEntity 类。

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

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

【问题讨论】:

  • 你知道instanceof吗?

标签: java collections for-loop each


【解决方案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
        }
    }
}

【讨论】:

    【解决方案2】:

    试试:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2013-01-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-11
        • 2015-07-27
        相关资源
        最近更新 更多