java如何从动态实现接口的类中获取方法?
我正在用Java开发一个简单的2D游戏。有两个机器人:它们可以移动、战斗等。。这些类实现相同的接口
问题是:
如何在运行时实例化机器人?我的意思是,当程序运行时,请用户加载类,然后使用它们的方法(按1获得自己的屏蔽点..)就像一个角色扮演游戏。。我试着使用反射,但在界面上不起作用
我的反思方法:
public void invokeClassMethod(String classBinaryName, String methodName) { try { ClassLoader classLoader = this.getClass().getClassLoader(); Class<?> loadClass = classLoader.loadClass(classBinaryName); System.out.println("Loaded class name: " + loadClass.getName()); Constructor<?> constructor = loadClass.getConstructor(); Object classObject = constructor.newInstance(); Method method = loadClass.getMethod(methodName); System.out.println("Invoked method name: " + method.getName()); method.invoke(classObject); } catch (ClassNotFoundException ex) { ex.printStackTrace(); } catch (Exception ex) { ex.printStackTrace(); } }
这是获得enemyPosition的好方法吗
机器人界面:
public interface Robot {
public String getPosition();
public String getEnemyPosition();
public String getArenaSize();
public int getShield();
}
机器人1类:
public class Robot1 implements Robot {
private int xCurrent;
private int yCurrent;
private int shield;
private final int attack = 1;
Robot robot2;
public Robot1() {
}
public Robot1(int x, int y, int shield, Robot robot2) {
this.xCurrent = x;
this.yCurrent = y;
this.shield = shield;
this.robot2 = robot2;
}
@Override
public String getPosition() {
return "x: " + xCurrent + " y: " + yCurrent;
}
@Override
public String getEnemyPosition() {
return robot.getPosition();
}
@Override
public int getShield() {
return shield;
}
}
此外,Arena类存储游戏板信息,如竞技场大小、打印等。。。如果我想在这个竞技场上操作(移动机器人对象[1][1]-->;[3][2]),如何连接机器人界面和竞技场
在哪里存放他们的位置(在混凝土类或其他地方)?聚合是最好的方法吗?如何避免紧密耦合
# 1 楼答案
不太可能,也许你可以用x和y属性创建一个班级职位
我认为竞技场物体应该容纳竞技场中的物体(你的机器人)
竞技场的地图和关键位置(见2。)而价值机器人将是我的方法