【发布时间】:2015-09-14 00:41:13
【问题描述】:
在我的 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));
控制台输出错误!这是怎么回事?
【问题讨论】:
-
阅读docs。使用 isInstance 时,仅当参数是该类的实例时才返回 true,而不是当参数是同一个类对象时返回 true。
Spell.class.isInstance(new Spell())返回true。您没有向它传递该类型的实例,因此它返回false -
这是 java.lang.Class.isInstance() 方法的声明-
public boolean isInstance(Object obj)
标签: java class reflection instanceof