关于我的系统:
我正在制作RPG游戏,我希望人们选择一个套件。套件就像一个拥有它自己的效果和物品的类。
现在每个玩家都可以使用命令选择套件。
每个工具包都实现了Kit界面:
public interface Kit {
public void addItems();
public void execute();
}
试剂盒类的例子:
public class Warrior implements Kit {
private Client player;
public Warrior(Client c) {
this.player = c;
}
/**
* Adds item to the player.
*/
@Override
public void addItems() {
for (Integer item : PlayerKits.WARRIOR.getItems()) {
this.player.getItems().addItem(item, 1);
}
}
/**
* This is used for kits effects.
*/
@Override
public void execute() {
// TODO add a task scheduler and handle kit effects
}
}
现在在Client对象中,我有这个:
public Kit playerKit = null;
我的问题:
如果播放器未选择套件,系统将使用默认套件。 我想将默认工具包类型存储到最终变量中,以便系统动态地使用默认工具包类型作为实例。
不可编辑 示例:
private final Kit DEFAULT_KIT = Warrior;
public void setKit(Client c) {
if (c.playerKit != null) {
c.playerKit.addItems();
c.playerKit.execute();
} else {
c.playerKit = new DEFAULT_KIT();
c.playerKit.addItems();
c.playerKit.execute();
}
}
这基本上显示了我想要实现的想法,但我认为不可能将类型存储到变量中,然后使用它们创建新实例。
当然我可以这样做:
private final PlayerKits DEFAULT_KIT = PlayerKits.WARRIOR;
public void getType() {
switch(DEFAULT_KIT) {
case WARRIOR:
return new Warrior();
break;
// ... more cases
}
}
但我希望解决方案简短,简洁,设计好。 这可能吗?
答案 0 :(得分:0)
Java类型在运行时表示为类。对类的引用可以存储在如下变量中:
private final Class<Kit> DEFAULT_KIT = Warrior.class;
public void setKit(Client c) {
...
c.playerKit = DEFAULT_KIT.newItem();
...
}
}