所以我正在为我正在创建的应用程序创建自己的物理引擎。目前,我有一个StaticObject
类,用于不模拟每个游戏标记的简单对象,以及一个DynamicObject
类用于与重力和碰撞有关的对象等。接下来,我正在创建一个约束类来创建这些不同对象之间的链接,例如使dynamicObject
保持与此staticObject
相同的位置。
好吧,我正在尝试从StaticObject
类访问对象类(DynamicObject
或Constraint
)中的一些方法和值,但是我是特定的类型/类。访问是可变的。它可以是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;
}
}
我确定无论对象是什么类型(StaticObject
或DynamicObject ), they will each have the attribute
object.position`。
所以,我的问题归结为:我如何确定变量类的类型正确(StaticObject
或DynamicObject
),然后如何访问类中的方法和变量不管是哪种类型?我是朝着正确的方向前进的吗?如果没有,我可以学到更好的方法吗?
请举例,这对我来说是新的。 :)
答案 0 :(得分:0)
您可以混合使用Generics和某些Inheritance
来执行此操作此处的SuperClass
用作可以包含StaticObject
和DynamicObject
的公共属性的类。
通用类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();
}
}