繁体   English   中英

根据用户输入创建特殊的子类对象

[英]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");

您将需要管理一些例外,但没什么大不了的。

更多信息在这里Classhttp : //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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM