我有一个原始的碰撞系统,它检查每对对象以查看它们是否发生碰撞。
int size = drawables.size();
for(int i = 0; i < size; ++i)
{
for(int j = i+1; j < size; ++j)
{
Drawable drawable = drawables.get(i);
Drawable drawable2 = drawables.get(j);
if(CollisionDetector.areColliding(drawable, drawable2))
{
CollisionHandler.handleCollision(drawable, drawable2);
}
}
}
CollisionDetector
和CollisionHandler
都有各自功能的通用和特定版本,例如
public static boolean handleCollision(Drawable drawable1, Drawable drawable2)
public static boolean handleCollision(Player player, SolidRectangle rectangle)
public static boolean handleCollision(Player player, Snowflake snowflake)
其中Player
, SolidRectangle
, 和Snowflake
都延伸Drawable
。我希望上面的循环调用每个可用方法的最具体版本,但目前它只会调用超类的那个Drawable
。有没有办法在不手动检查类的情况下做到这一点instanceof
?
我可以从以下示例中看到这可能是不可能的: If B extends A
and C extends A
and I write the methods
public void foo(A a, C c)
public void foo(B b, A a)
然后有
A objectB = new B();
A objectC = new C();
foo(objectB, objectC);
的电话foo
会模棱两可,但我希望有人可能比我对此事有更多的了解。有没有办法解决这个问题?