java - 带有枚举的 nullPointerException

标签 java

我正在编写一个游戏,玩家必须在对话框字段中输入一些内容,而 java 必须将其解释为一个 Action 。我有一个名为 GameEngine 的类,我在其中使用开关:

public void interpretCommand(final String commandLine) 
{
    Command command = parser.getCommand(commandLine);
    CommandWord commandWord = command.getCommandWord();
    switch ( commandWord ) {
      case UNKNOWN: 
         gui.println("Unknown command...");
         return;
      case LOAD: 
         load(); 
         break;
    } 
}

这里使用的枚举位于枚举类中:

public enum CommandWord
{
    LOAD("charger"),UNKNOWN("?");
    private String commandWord;
 }

最后是 CommandWords 类:

public class CommandWords
{
    // a HashMap that holds all valid command words
   private HashMap<String, CommandWord> validCommands; 

   public CommandWords()
   {
      validCommands = new HashMap<String, CommandWord>();
      for(CommandWord command : CommandWord.values()) {
          if(command != CommandWord.UNKNOWN){
              validCommands.put(command.toString(), command);
          }
      }
   }


   /**
     * @param commandWord the command word to look for in the valid commands
     * @return the commandWord associated with the word typed
     */
    public CommandWord getCommandWord(final String commandWord)
    {
        CommandWord command =validCommands.get(commandWord);
        if(command !=null) {
           return command;
        }
        else {
           return CommandWord.UNKNOWN;
        }
    }

命令类:

public class Command
{
    private CommandWord commandWord;

    /**
     * @param commandWord from enum class
     */
    public Command(CommandWord commandWord)
    {
        this.commandWord = commandWord;
    }

    public CommandWord getCommandWord()
    {
        return commandWord;
    }
}

我的问题很简单:当我输入充电器时,它可以工作,但是当我输入一个不在列表中的随机单词时,我在终端中的行中收到一个 NullPointerException

        switch ( commandWord )

在解释命令中。

我看不出我的代码有什么问题。如果有人可以帮忙,谢谢。 请不要怪我,我是新手,几个月前才刚刚开始!

解决方案:在命令中修改/添加这些行

    public boolean isUnknown()
{
    return (commandWord == null);
}

    public CommandWord getCommandWord()
{
    if(!isUnknown()){

    return commandWord;

}
 else return CommandWord.UNKNOWN;
}

最佳答案

这一行只有一件事可以为 null,那就是 commandWord。因此,您的方法调用 command.getCommandWord() 返回 null。

编辑:根据您现在提供的信息,这意味着解析器返回一个没有设置 commandWord 的 Command 对象。

关于java - 带有枚举的 nullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14030316/

相关文章:

java - 避免使用多个 if-else 语句

java - Google App Engine 和 Java org.reflection 库 - 扫描过程中出错

java - 使用logback-spring.xml时如何保留springboot默认日志

java - Eclipse Java 编辑器换行不符合预期

java - OffsetDateTime 与 Spring Data Couchbase

java - Spring Security OAuth - 未为空资源配置提供者管理器

java - 如何从 C 调用 Java 函数

java - 为什么我的 Spring OAuth2 服务器无法使用 SSL 自签名 ssl?

java - 您将如何在 Ruby 中实现这个 Java 枚举类?

Netbeans 中的 Java 代码可以工作,但通过 cmd 提示符执行 jar 会出现 nosuchmethod 错误异常