Java 即时创建类的实例

标签 java class

我正在制作一个小型纸牌游戏。在此游戏中,新玩家是扩展一般玩家类的 AIPlayer 或 HumanPlayer 类的实例。

目前要生成播放器,我有以下代码:

private List<Player> players;

HumanPlayer playerA = new HumanPlayer("playerA");
playerA.addObserver(gameModelObserver);
players.add(playerA);

AIPlayer playerB = new AIPlayer("playerB");
playerB.addObserver(gameModelObserver);
players.add(playerB);

AIPlayer playerC = new AIPlayer("playerC");
playerC.addObserver(gameModelObserver);
players.add(playerC);

HumanPlayer playerD = new HumanPlayer("playerD");
playerD.addObserver(gameModelObserver);
players.add(playerD);

是否可以动态生成这些类? 我可以做一些事情,比如用玩家名称和 boolean 值迭代链表的所有元素,以指示它们是 AI 还是人类,然后为它们生成一个类的实例。如果是,怎么办?

编辑:为了更清楚,我正在寻找这样的事情是否可行:

for(int i=0; i<x; i++){
player i = new Player("i");
i.addObserver(gameModelObserver);
players.add(i); }

最佳答案

这不能回答您的问题,但是,也许可以解决您的问题:

private List<Player> players;

public void createPlayerByName(String name, Class type) {
  Player player = type.equals(HumanPlayer) ? new HumanPlayer(name) : new IAPlayer(name);
  player.addObserver(gameModelObserver);
  players.add(player);
}

public void createHumanPlayerByName(String name) {
  createPlayerByName(name, HumanPlayer.class);
}

public void createIAPlayerByName(String name) {
  createPlayerByName(name, AIPlayer.class);
}

因此对于您的列表,您只需要这样做:

for (String name : humanNameList) {
  createHumanPlayerByName(name);
}

for (String name : aiNameList) {
  createAIPlayerByName(name);
}

关于Java 即时创建类的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31476208/

相关文章:

swift - 为什么选择结构而不是类?

java - 循环中的 PathTransition

java - 一个对象可以被多个类控制吗? (以及如何阻止这种情况发生)

java - Maven 指向 JRE 而不是 jdk

java - 根据复选框值调用 Javascript

java - 如何始终在 spring 应用程序中启用我的 Hibernate 过滤器?

java - 如何将一个jsp文件的数据使用到另一个jsp文件中

C++:单例的替代品

java - 使用反射从动态方法获取参数类型

java - 我如何调用这个 Ffun() 并访问这个类?