使用instanceof比较不同的类

  • Entity.class抽象母类
  • Player.class扩展实体
  • Wall.class扩展实体
                 public class slkjflksdjf
                 {
                     ArrayList entities = new ArrayList();
                     Player player = new Player();
                     Wall wall = new Wall();

                     public slkjflksdjf()
                     {

                         entities.add(player);
                         entities.add(wall);

                         for(int i = 0; i < entities.size(); i++)
                         {

                             if(entities.get(i) instanceof Wall)
                             {
                                 //do something
                             }

                         }

                     }
                 }

通过我的实体的实际完整大小列表检查instanceof时,它会一遍又一遍地抛出“执行此操作”块,换句话说,就是迅速播放音频剪辑。 所以从我可以看出来,它会将Wall和Player都当作实体对待,所以即使InstanceOf都是原始实体的扩展,执行InstanceOf也会导致它拉成true?

coffee3582 回答:使用instanceof比较不同的类

如果Player和Wall都扩展了实体接口,则可以执行以下操作:

ArrayList<Entity> entities = new ArrayList<Entity>();
Player player = new Player();
Wall wall = new Wall();

entities.add(0,player);
entities.add(1,wall);

// entities.get(0) instanceof Player is true
// entities.get(0) instanceof Wall is false
// entities.get(0) instanceof Entity is true

// entities.get(1) instanceof Player is false
// entities.get(1) instanceof Wall is true
// entities.get(1) instanceof Entity is true

for(Entity entity : entities) {

  if(entity instanceof Player) {
    // is player
  } else if(entity instanceof Wall) {
    // is wall
  }

}

希望这会有所帮助

,

如果Player是Entity的子类,而Wall是Entity的子类:

player Instanceof Entity返回true。

如果Wall是Entity的子类:

wall instanceof Entity返回true。

但是相反的说法不正确(即Wall的instance instance) 为什么?因为这就是instanceof运算符的定义方式。

此外,如果Wall和Player不相关(意味着一个不是另一个的子类,或者在接口的情况下实现)。 玩家instanceof Wall返回false, Wall instanceof Player返回false。

本文链接:https://www.f2er.com/2505408.html

大家都在问