オブジェクトのすべてのペアをチェックして、それらが衝突しているかどうかを確認するプリミティブ衝突システムがあります。
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
ますか?
次の例から、これが不可能な場合があることがわかりました。メソッドを記述したB extends A
場合C extends A
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
曖昧ですが、誰かが私よりも問題についてより多くの洞察を持っていることを願っています。これを回避する方法はありますか?