2014-06-23 6 views
0

Je travaille donc sur la création de mon propre moteur physique pour une application que je crée. En ce moment j'ai une classe StaticObject pour les objets simples qui ne simulent pas chaque tick de jeu, et une classe DynamicObject pour les objets qui se rapportent à la gravité et aux collisions et autres. Ensuite, je crée une classe de contraintes pour créer des liens entre ces différents objets, comme faire que ce dynamicObject reste à la même position que ce staticObject.Accès aux méthodes à partir d'une classe de type variable

D'accord, je tente d'accéder à certaines méthodes et valeurs dans les classes d'objets (ou StaticObjectDynamicObject) de la classe Constraint, mais le type/classe spécifique que j'accède est variable. Il peut s'agir du type StaticObject ou DynamicObject.

Ceci est la classe qui a besoin d'accéder aux classes Object, ou 'classe de type variable' (je ne connais pas les termes appropriés ici, je voudrais savoir cependant, un peu nouveau à cet aspect de 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; 
    } 

} 

Je sais avec certitude que quel type les objets sont (ou StaticObjectDynamicObject), they will each have the attribute object.position`

Alors, ma question se résume à:. Comment puis-je déterminer que les classes variables sont de la bonne types (StaticObject ou DynamicObject) puis comment puis-je accéder à des méthodes et des variables dans les classes quel que soit le type? Suis-je dans la bonne direction? Si non, quelles sont les meilleures façons d'apprendre?

Exemples s'il vous plaît, c'est nouveau pour moi. :)

Répondre

0

Vous pouvez le faire avec un mélange de Generics et certains Inheritance

Le SuperClass ici sert de classe qui peut avoir les propriétés communes de la StaticObject et DynamicObject.

La classe générique Constraint peut alors accepter tout type qui étend cette SuperClass

En dehors de cela, vous pouvez utiliser l'opérateur instaceof pour vérifier si le type est StaticObject ou DynamicObject avant d'effectuer toute particulière opération à l'un de ces deux Des classes.

J'espère que cet exemple peut vous mener exactement à ce que vous essayez d'implémenter.

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

Donc, les génériques sont les trucs de type variable? – SuperContraptionGuy

+0

Oui, à certains égards. En savoir plus sur la façon dont les génériques sont utilisés dans les collections Java. –

Questions connexes