2014-06-23 241 views
0

所以我正在爲我創建的應用程序創建自己的物理引擎。目前,我已經有了一個StaticObject類,用於不模擬每個遊戲刻度的簡單對象,以及用於涉及重力和碰撞等的對象的DynamicObject類。接下來,我創建一個約束類來創建這些不同對象之間的鏈接,例如使這個dynamicObject保持在與此staticObject相同的位置。我試圖訪問Constraint類的對象類(StaticObjectDynamicObject)中的一些方法和值,但我訪問的特定類型/類是可變的。它可以是類型StaticObjectDynamicObject從變量類型類訪問方法

這是需要訪問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),然後如何訪問方法和變量在類內不管類型?我是否朝着正確的方向前進?如果不是,我可以學習哪些更好的方法?

請舉例,這對我來說是新的。 :)

回答

0

您可以用Generics混合和一些Inheritance

SuperClass這裏充當可以從StaticObjectDynamicObject共同屬性來實現這個目的。

通用類,然後Constraint可以接受它除了擴展了這個SuperClass

這個,你可以使用instaceof運算符來檢查類型是否爲StaticObjectDynamicObject執行特定任何操作這兩個中的一個之前的任何類型類。

我希望這個例子能夠引導你到達你想要實現的東西。

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(); 
    } 

} 
+0

那麼,泛型是變量類型的東西? – SuperContraptionGuy

+0

是的,在某些方面是。詳細瞭解Java集合中如何使用泛型。 –