我正在使用Java(Swing应用程序)进行机器人仿真.我有一个抽象类“机器人”,从中可以派生出不同类型的机器人,例如
public class StupidRobot extends Robot {
int m_stupidness;
int m_insanityLevel;
...
}
public class AngryRobot extends Robot {
float m_aggression;
...
}
如您所见,每个Robot子类都有一组不同的参数.
我想做的是在初始UI中控制仿真设置.选择机器人的编号和类型,为其命名,并填写参数等.
这是成为这样的恐龙程序员的时代之一,并且是Java的新手,我想知道是否有一些更高层次的东西/想法可以在这里帮助我.所以这就是我所拥有的:
(1)用户界面
左侧的机器人类型滚动列表.
“添加>>”和中间的“<
右侧的默认名称的机器人滚动列表.
下方的“设置参数”按钮.
(因此,如果您要使用AngryRobot,请在左侧列表中选择AngryRobot,然后单击“添加>>”,然后在右侧显示“ AngryRobot1”.)
在右侧选择一个机器人时,单击“设置参数…”按钮,这将调用另一个模型对话框,您将在其中填写参数.每个对话框调用不同的对话框
机器人类型.
(2)数据结构的实现
作为最终产品,我认为HashMap将最为方便.键将是机械手类型,而附带的对象将是所有参数.初始化程序可以只检索每个项目和一个时间并实例化.数据结构如下所示:
enum ROBOT_TYPE {STUPID, ANGRY, etc}
public class RobotInitializer {
public ROBOT_TYPE m_type;
public string m_name;
public int[] m_int_params;
public float[] m_float_params;
etc.
初始化程序的构造函数将根据类型创建适当的length参数数组:
public RobotInitializer(ROBOT_TYPE type, int[] int_array, float[] float_array, etc){
switch (type){
case STUPID:
m_int_params = new int[STUPID_INT_PARAM_LENGTH];
System.arraycopy(int_array,0,m_int_params,0,STUPID_INT_PARAM_LENGTH);
etc.
实例化所有RobotInitializer后,它们将被添加到HashMap中.
模拟初始化程序通过HashMap进行迭代,从Hashmap中获取项目并实例化适当的机械手.
这合理吗?如果没有,该如何改善?
谢谢
解决方法:
如前所述,您可以使机器人成为RobotInterface的实现.然后:
Class aRobotClass = Class.forName("robotClassName"); //or similar
Class[] aRobotClassImplements = aRobotClass.getIterfaces();
// Then ensure that "RobotInterface" exists in the aRobotClassImplements array.
RobotInterface应该为机器人属性定义吸气剂和吸气剂.
我假设eash机器人可以具有一系列不同的属性.可以动态检查Robot实例并创建适当的按钮/控制器.例如:
Field[] robotFields = aRobotClass.getFields();
for (Field field : robotFields) {
JButton jbutton = new JButton(field.getName());
//assuming this class implements ActionListener
jbutton.addActionListener(this);
// Then assume we have a private class representing a button )
this.hashMapOrVectorOfButtons.add(new PrivateButton(field));
jpanel.add(jbutton);
// etc etc
}
稍后在actionPerformed中,遍历已注册按钮的哈希图或向量. (field.getName().equals(actionEvent.getActionCommand())).然后在您的Robot实例中操作适当的字段.
标签:runtime,java,class
来源: https://codeday.me/bug/20191024/1917618.html