[英]Create a spesific subclass object from user input
第一篇文章,所以猜想我还是有点菜鸟。
场景:我正在制作一个基于文本的RPG,这个问题与角色创建过程有关。
我有一个具有几个子类(例如,牧师,战士,法师)的超类(个人)。 我知道如何获得条件用户输入(例如“您想成为一名文员,战斗员还是法师”)并且角色创建工作正常(我可以使用正确的变量制作一个法师子类,并且子类方法将覆盖超类方法)。
我不知道的是如何制作一个构造用户输入子类的构造函数(在下面指定)。
我知道if的方法包括“ if, if else
”语句,例如-
If( user_input.equals("Cleric"))
{
Cleric userName = new Cleric(userName);
}
等等,但是我有点想避免它。
我也希望稍后避免所有“ instanceOf”语句,因此我希望main知道“ player”是哪种子类。
因此,就这一点而言:
我真正想要的是主要的几行,例如:
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作为A CLASS TYPE返回给main
返回main,完成如下调用:
user_inputted_class player = new user_inputted_class(playername);
谢谢
我最终在开关中为每个类选项使用了枚举,并使用了playerinput(option1,option2,option3,option4)作为输入。
有点像“ ifs”,但主要看起来更整洁。
您可以使用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
以确保该条目存在于地图中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.