Java - Class.isInstance() 总是 returns 错误

Java - Class.isInstance() always returns false

在我的游戏对象 class 中,我有以下方法来检查游戏对象移动到指定位置时是否会与另一个对象发生碰撞:

public boolean collisionAt(Vector2d position, Class<? extends GameObject>... exclusions) {
    if (getBounds() == null)
        return false;
    Rectangle newBounds = getBounds().clone();
    newBounds.setPosition(position);
    // Check collisions
    for (GameObject object : new ArrayList<>(gameObjects)) {
        if (object.getBounds() != null && newBounds.intersects(object.getBounds()) && object != this) {
            boolean b = true;
            for (Class<? extends GameObject> exclusion : exclusions) {
                if (object.getClass().isInstance(exclusion))
                    b = false;
            }
            if (b)
                return true;
        }
    }
    return false;
}

我想让程序定义排除项,例如,如果我不希望此方法在与法术冲突时 return 为真。但出于某种原因,Class.isInstance() 行总是 return 错误。我什至试过这个:

System.out.println(Spell.class.isInstance(Spell.class));

控制台输出false!这是怎么回事?

您需要传入相关 class 的实例,而不是 class 文字。例如

Spell spell = new Spell();
System.out.println(Spell.class.isInstance(spell));

来自官方Java文档

public boolean isInstance(Object obj)

确定指定的对象是否与此 Class 表示的对象赋值兼容。此方法是 Java 语言 instanceof 运算符的动态等价物。方法 returns 如果指定的 Object 参数不为 null 并且可以转换为此 Class 对象表示的引用类型而不引发 ClassCastException,则为 true。否则 returns false。

您需要传入 class 的对象而不是 class 本身。

例子

SomeClass object = new SomeClass();
System.out.println(SomeClass.class.isInstance(object));

isInstance 测试给定对象是否是 Class 的实例,而不是测试给定 Class 是否是 Class.[=16 的子类=]

你的调用倒退了。您需要测试 gameObject 是否是排除项之一的实例 类.

if (exclusion.isInstance(gameObject))

isInstance 确定指定的 Object 是否与 this Class 表示的对象赋值兼容.当它需要一个对象时,您将 class 传递给它。

反之亦然:

Spell.class.isInstance(spell)