繁体   English   中英

Java - Class.isInstance() 总是返回 false

[英]Java - Class.isInstance() always returns false

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

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;
}

我希望允许程序定义排除项,例如,如果我不希望此方法与 Spell 冲突时返回 true。 但出于某种原因, Class.isInstance() 行总是返回 false。 我什至试过这个:

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

并且控制台输出false! 这里发生了什么?

isInstance测试给定的对象是否是Class的实例,而不是给定的Class是否是Class的子Class

你有你的调用倒退。 你需要测试,如果gameObject是排斥的一个类的实例。

if (exclusion.isInstance(gameObject))

来自官方 Javadocs

public boolean isInstance(Object obj)

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

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

例子

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

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

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

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

相反应该工作:

Spell.class.isInstance(spell)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM