Java 使用instanceof比较不同的类 Entity.class抽象母类 类扩展实体 类扩展实体 公共类slkjflksdjf { ArrayList实体=新的ArrayList(); 玩家=新玩家(); 墙=新墙(); 公共slkjflksdjf() { 实体。添加(玩家); 实体。添加(墙); 对于(int i=0;i

Java 使用instanceof比较不同的类 Entity.class抽象母类 类扩展实体 类扩展实体 公共类slkjflksdjf { ArrayList实体=新的ArrayList(); 玩家=新玩家(); 墙=新墙(); 公共slkjflksdjf() { 实体。添加(玩家); 实体。添加(墙); 对于(int i=0;i,java,arraylist,instanceof,Java,Arraylist,Instanceof,当通过我的实体的实际完整大小列表检查instanceof时,它会一次又一次地快速抛出“DoThis”块,换句话说,快速播放音频剪辑lol。。 从我所能看出,它将墙和玩家都视为实体,所以这样做InstanceOf只是导致它拉一个真值,即使它们都是原始实体的扩展?如果玩家和墙都将实体扩展到面内,则可以执行以下操作: ArrayList<Entity> entities = new ArrayList<Entity>(); Player player = new Player(

当通过我的实体的实际完整大小列表检查instanceof时,它会一次又一次地快速抛出“DoThis”块,换句话说,快速播放音频剪辑lol。。
从我所能看出,它将墙和玩家都视为实体,所以这样做InstanceOf只是导致它拉一个真值,即使它们都是原始实体的扩展?

如果玩家和墙都将实体扩展到面内,则可以执行以下操作:

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
  }

}
ArrayList entities=new ArrayList();
玩家=新玩家();
墙=新墙();
添加(0,玩家);
实体。添加(1,墙);
//entities.get(0)instanceof Player为true
//entities.get(0)instanceof Wall为false
//实体。实体的get(0)instanceof为true
//entities.get(1)instanceof Player为false
//entities.get(1)instanceof Wall为true
//entities.get(1)instanceof Entity为true
for(实体:实体){
if(播放器的实体实例){
//是玩家吗
}else if(墙的实体实例){
//是墙吗
}
}

如果Player是Entity的子类,而Wall是Entity的子类,那么希望这有助于:

实体的播放器实例返回true

如果墙是实体的子类:

实体的墙实例返回true

但是,相反的情况并非如此(.e.e.entity instanceof Wall) 为什么?因为这就是instanceof运算符的定义方式

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

我可以在这个arraylist中填充50个不同的Floor副本,这也扩展了实体,当我知道不是所有东西都是wall对象时,它仍然会执行instanceof块中的内容。因此,我认为这是因为它们都扩展了实体类,所以将它们视为相同的东西。请在问题中输入代码文本。然后使用“{}”工具查看已格式化的文本,假设它之前已格式化。我在每一级缩进中使用三个空格,或者它在输出时将所有对象都视为相同的??在代码文本之后。如果无法修复,请不要担心格式问题。不管有多少空格。这就是每行后面的格式要求。14左右?如果我想选择一个特定的索引,我不是说我在一个接一个地遍历整个列表,检查它是否是一堵墙,当所有元素都是数组中的随机索引时,这意味着我不能只指向特定的索引进行检查感谢您尝试在forloop中遍历xdoooh,只需使用I作为索引就行了我明白了您的意思不需要2个数组或2个接口。无论我尝试了多少次都没有成功,但仍然是正确的。然后我意识到我已经在我的主游戏循环和StartName中初始化了玩家,所以ofc在0,0坐标中抛出的整个时间都是真的,其中存在一个树对象。。。问题解决了,看起来很开心
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
  }

}