java指定运行类_Java在运行时加载用户指定的类

我正在使用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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值