Java 无法使用instanceof比较两个对象

Java 无法使用instanceof比较两个对象,java,oop,Java,Oop,尝试比较作为参数传递的两个对象时:第一个作为对象,第二个作为对象数组(相同类型)。获取错误不兼容的条件操作数类型Room和AllRoom[]。我试图在中迭代,同时循环,直到此房间类型不等于房间中的某个对象。如何修复它 public abstract class Room { ...} public class LightRoom extends Room {...} public class DarkRoom extends Room {...} 来电者: release(thisRoomT

尝试比较作为参数传递的两个对象时:第一个作为对象,第二个作为对象数组(相同类型)。获取错误
不兼容的条件操作数类型Room和AllRoom[]
。我试图在
中迭代,同时
循环,直到
此房间类型
不等于
房间
中的某个对象。如何修复它

public abstract class Room { ...}
public class LightRoom extends Room  {...}
public class DarkRoom extends Room {...}
来电者:

release(thisRoomType, rooms)
带参数

private Room thisRoomType = this; // is defined in DarkRoom and LightRoom 
private Room[] rooms; // is defined in DarkRoom and LightRoom 
在方法上:

public synchronized void release( Room thisRoom,  Room[] allRooms) {

        try {
            int j = 0;
            while(thisRoom instanceof allRooms[j]){     
                jj++;
            }
                        int nextRoom = jj;
...
    }
}
请尝试以下方法:

while (j < allRooms.length && thisRoom.getClass().equals(allRooms[j].getClass()))
while(j
您的逻辑错误。
instanceof
在传递对象实例时需要一个
ReferenceType
。这是行不通的。
你应该做的是:

  • 包装
    名称或
  • 名称或
  • 与具体类比较(
    getClass

    根据您的需要选择

    @RCola抱歉,您看到了我以前版本的答案。试用更新的。@ewernli我不确定这是否有问题。因为如上所述,OP的问题将始终循环,直到出现
    ArrayIndexOutOfBoundsException
    为止,非空
    房间
    将始终是
    房间[]
    中任何非空元素的实例。代码可能只有在遇到不同类型的房间时才有意义,我的答案就是这样做的。请参见,这是一个等待发生的
    ArrayIndexOutOfBoundsException
    while
    条件必须包括
    jj