Java动态创建类的实例

时间:2015-07-17 12:48:11

标签: 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);

是否可以动态生成这些类? 我可以做一些事情,比如使用播放器名称和布尔值迭代链表的所有元素,以指示它们是AI还是Human,然后为它们生成类的实例。如果是这样,怎么样?

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

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

2 个答案:

答案 0 :(得分:5)

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

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);
}

答案 1 :(得分:1)

可能是这样的:

maximumSize