第一篇文章,所以猜我仍然有点像菜鸟。
设置:我正在制作基于文本的RPG,这个问题与角色创建过程有关。
我有一个超级(个人),有几个子类(例如牧师,战士,法师)。我知道如何获得有条件的用户输入(比如“你想成为牧师,战士还是法师”)并且角色创建工作正常(我可以使用正确的变量创建一个mage子类,并且子类方法会覆盖超类方法)。
我不知道的是,如何创建一个构造函数来创建用户输入的子类(在下面指定)。
我知道的方法是否包括“if, if else
”语句,如 - “
If( user_input.equals("Cleric"))
{
Cleric userName = new Cleric(userName);
}
等等,但我有点想避免它。
我也想稍后避免所有“instanceOf”语句,所以我希望main知道什么类型的子类“播放器”。
所以,点:
我真正想要的是像这样的主线:
String playername = getInput("Please give your name"); (I have this)
Class/String/whatever subClass = constructorClass();
哪个班级
Public ClassInstance constructorClass()
执行类似
{
// String classType = userInput("Do you want to be a", option1, option2,option3,option4);}
将classType AS A CLASS TYPE返回到main
回到主要部分,这样的电话就完成了:
user_inputted_class player = new user_inputted_class(playername);
谢谢
答案 0 :(得分:0)
我最终在交换机中为每个类选项使用enum,并使用playerinput(option1,option2,option3,option4)进行输入。
它有点像“如果”,但看起来更整洁。
答案 1 :(得分:-1)
您可以使用Class
类。
一个快速的例子:
Class<Cleric> clazz = Cleric.class;
// Later
// I assume you have only one constructor
Cleric userName = clazz.getConstructors()[0].newInstance("hello");
你有一些例外可以管理,但没什么大不了的。
更多信息Class
此处:http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html
这是您的特殊情况的更好示例:
// XXXX is the super class of Cleric and Warrior.
Map<String, Class<? extends XXXX>> map = new HashMap<>();
map.put("cleric", Cleric.class);
map.put("warrior", Warrior.class);
// ...
XXXX player = map.get(nameOfSubclass).getConstructors()[0].newInstance("playername");
您需要管理一些例外情况。您应该测试nameOfSubclass
以确保该条目存在于地图中。