从变量类类访问方法

时间:2014-06-23 03:16:58

标签: java android class physics-engine

所以我正在为我正在创建的应用程序创建自己的物理引擎。目前,我有一个StaticObject类,用于不模拟每个游戏标记的简单对象,以及一个DynamicObject类用于与重力和碰撞有关的对象等。接下来,我正在创建一个约束类来创建这些不同对象之间的链接,例如使dynamicObject保持与此staticObject相同的位置。

好吧,我正在尝试从StaticObject类访问对象类(DynamicObjectConstraint)中的一些方法和值,但是我是特定的类型/类。访问是可变的。它可以是StaticObject类型,也可以是DynamicObject

这是需要访问Object类或“变量类型”的类(我不知道这里的正确术语,我想知道,这方面有点新) JAVA):

public class Constraint<objectType1, objectType2> {

    private Class<objectType1> object1;
    private Class<objectType2> object2;


    public Constraint(Class<objectType1> object1, Class<objectType2> object2) {

        this.object1 = object1;
        this.object2 = object2;
    }

    public void update() {

        object2.position = object1.position;
    }

}

我确定无论对象是什么类型(StaticObjectDynamicObject ), they will each have the attribute object.position`。

所以,我的问题归结为:我如何确定变量类的类型正确(StaticObjectDynamicObject),然后如何访问类中的方法和变量不管是哪种类型?我是朝着正确的方向前进的吗?如果没有,我可以学到更好的方法吗?

请举例,这对我来说是新的。 :)

1 个答案:

答案 0 :(得分:0)

您可以混合使用Generics和某些Inheritance

来执行此操作

此处的SuperClass用作可以包含StaticObjectDynamicObject的公共属性的类。

通用类Constraint可以接受任何扩展此SuperClass

的类型

除此之外,您可以使用instaceof运算符在执行特定于这两个类之一的任何操作之前检查类型是StaticObject还是DynamicObject

我希望这个例子可以引导您完全实现您的目标。

class SuperClass{
    private int position;

    public int getPosition() {
        return position;
    }

    public void setPosition(int position) {
        this.position = position;
    }
}

class StaticObject extends SuperClass{

    StaticObject(int position){
        setPosition(position);
    }

}

class DynamicObject extends SuperClass{

    DynamicObject(int position){
        setPosition(position);
    }
}

public class Constraint<T1 extends SuperClass, T2 extends SuperClass> {

    private T1 object1;
    private T2 object2;


    public Constraint(T1 object1, T2 object2) {

        this.object1 = object1;
        this.object2 = object2;
    }

    public void update() {

        object2.setPosition(object1.getPosition());
    }

    public static void main(String[] args) {
        Constraint<StaticObject, DynamicObject> c = new Constraint<StaticObject, DynamicObject>(new StaticObject(2), new DynamicObject(5));
        c.update();
    }

}