从用户输入创建特定的子类对象

时间:2015-04-08 10:11:39

标签: java constructor subclass

第一篇文章,所以猜我仍然有点像菜鸟。

设置:我正在制作基于文本的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);

谢谢

2 个答案:

答案 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以确保该条目存在于地图中。