Java的:调用取决于参数类型不同的方法的最有效的方法,它都有着相同的超

问题描述 投票:0回答:1

考虑以下:有一个abstract class Collider和一些更类,扩展此类例如RectColliderCircleCollider。这些多个实例都在同一List<Collider> colliders

现在,我的问题是,我应该怎么接近检查这些撞机之间的碰撞,同时保持它们之间的兼容性。例如,我要检查一个RectCollider和检查RectColliderRectCollider另一CircleCollider不同之间的冲突。

我的想法至今使用的方法来检查哪些类型的对撞机是(通过的instanceof),然后调用根据结果不同的方法:

public Collision getCollision(Collider a, Collider b) {
    if(a instanceof RectCollider) {
        if (b instanceof CircleCollider) {
            return rectCircle(a, b);
        }
        else if (b instance of RectCollider) {
            return rectRect(a, b);
        }
    }
    else if(a instanceof CirlceCollider) {
        if (b instanceof CircleCollider) {
            return cirlceCircle(a, b);
        }
        else if (b instance of RectCollider) {
            return rectCircle(b, a); 
        }
    }
    else {
        return null;
    }
}

该方法调用此方法的时刻:

getCollision(colliders.get(i), colliders.get(i+1));

但是,我不知道这是否真的是最快/最好的方法,因为这种方法变得过于复杂增加了更多的对撞机类型时,真正的快速。

java methods types instanceof
1个回答
0
投票

这样一来,当你添加新的子类的方法大小尺度平方。您是否可以简单地这样,取决于您呼叫(rectRect,rectCircle等)的方法。

是不是所有的这些方法不相关的,还是与相同形状的每个方法都有一个共同的行为?在前一种情况下,你的运气了。在后一种情况下,你可能希望定义在对撞机的子类这种行为,并添加提取这种行为的一般方法。那么这可能是固定的大小,e.g的:

public Collision getCollision(Collider a, Collider b) {
    Force f1 = a.getCollisionInfo();
    Force f2 = b.getCollisionInfo();
    return new Collision(f1, f2);
}

关于执行性能,也没关系。 JVM的优化都是为你。

© www.soinside.com 2019 - 2024. All rights reserved.