在我的 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
是否是 的子类>类
。
你的调用倒退了。您需要测试 gameObject
是否是排除类之一的实例。
if (exclusion.isInstance(gameObject))
关于Java - Class.isInstance() 总是返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31083699/