我正在用Java制作RPG游戏,用于学校作业。在游戏中,我接受用户输入,第一个单词是“命令单词”,因此我创建了一个枚举,将用户输入的字符串转换为枚举常量:
public enum CommandWord
{
GO("go"), QUIT("quit"), HELP("help"), BACK("back"), LOOK("look"), DROP("drop"), GRAB("grab"), USE("use"), UNKNOWN("?");
private String commandString;
/*
* Initialize with the corresponding command string.
* @param commandString the command string.
*/
CommandWord(String commandString) {
this.commandString = commandString;
}
public String toString()
{
return commandString;
}
有时第二个单词是“ go”之后的方向,所以我有一个第二个枚举,用于包含更多常量的方向:
UP("up"), DOWN("down"), NORTH("north"), SOUTH("south"), EAST("east"), WEST("west"), UNKNOWN("unknown");
我正在尝试提出一种构建HashMap来存储字符串和相关枚举常量的最佳方法。对于命令字,我有此类:
public class CommandWords
{
// A mapping between a command word and the CommandWord
// that is associated with it
private HashMap<String, CommandWord> validCommands;
/**
* Constructor - initialise the command words.
*/
public CommandWords()
{
validCommands = new HashMap<>();
for (CommandWord command : CommandWord.values()) {
if(command != CommandWord.UNKNOWN) {
validCommands.put(command.toString(), command);
}
}
}
/**
* Searches the HashMap of valid commands for the supplied word.
* @param commandWord The word we're searching for.
* @return The CommandWord that is mapped to the supplied string commandWord,
* or UNKNOWN if it is not in valid command.
*/
public CommandWord getCommandWord(String commandWord)
{
CommandWord command = validCommands.get(commandWord);
if (command!= null) {
return command;
}
else {
return CommandWord.UNKNOWN;
}
}
}
然后,我可以接受用户输入并搜索命令字,但不能将其重用于方向,项目,字符等。我使用泛型类进行了查看,但无法调用.values()之类的方法。对此,有什么好方法可以使我在不同的枚举上重用CommandWords类吗?
答案 0 :(得分:0)
我们在Enum上具有 valueOf(String)方法,您不必构建该地图。
对于您的情况,您有一个值,并且知道要转换为哪种Enum类型。因此,只需使用:
CommandWord.valueOf("QUIT");
Items.valueOf("GEM");
etc..
枚举必须在编译时确定。