Java 如何将方法可以使用的字符串参数限制为固定列表

Java 如何将方法可以使用的字符串参数限制为固定列表,java,illegalargumentexception,Java,Illegalargumentexception,下面的代码是我简单的“迷宫游戏”程序的关键方法之一(尽管它很简单,但恰好是我迄今为止最大的项目)。在这个方法中,我定义了可能的用户命令,并给出了执行这些命令的指令。我将“throw IllegalArgumentException”放在顶部的原因是,当我在main方法中调用此方法时,我希望将随机或错误的用户输入捕获为“IllegalArgumentException e”,并打印一条消息(“这不是有效的命令。如果您想知道有效的命令,请输入“help”) 不幸的是,因为我还没有找到一种方法将八个可

下面的代码是我简单的“迷宫游戏”程序的关键方法之一(尽管它很简单,但恰好是我迄今为止最大的项目)。在这个方法中,我定义了可能的用户命令,并给出了执行这些命令的指令。我将“throw IllegalArgumentException”放在顶部的原因是,当我在main方法中调用此方法时,我希望将随机或错误的用户输入捕获为“IllegalArgumentException e”,并打印一条消息(“这不是有效的命令。如果您想知道有效的命令,请输入“help”)

不幸的是,因为我还没有找到一种方法将八个可能的命令组合在一起作为此方法中唯一可能的参数,所以当我运行程序并输入无效输入时,不会引发非法参数异常。相反,当我输入无效输入时,什么也不会发生

所以我在寻找一种简洁的编码方法,在这个方法中,参数“action”只允许是“help”,“status”。。。“down”(而“save”命令的混乱性质让工作陷入困境)。有什么建议吗?我认为答案可能包括将可能的命令转换为数组,但具体如何操作我并不清楚(因为我是n00b)


我会使用这样的枚举

public class Actor {
    public void performAction(String actionString) throws IllegalArgumentException {
        String[] words = actionString.split(" ", 2);
        Action action = Action.valueOf(words[0].toUpperCase());
        if (words.length == 1)
            action.perform(this);
        else
            action.perform(this, words[1]);
    }

    enum Action {
        HELP {
            @Override
            public void perform(Actor a) {
                a.printHelp();
            }
        },
        STATUS {
            @Override
            public void perform(Actor a) {
                a.printStatus();
            }
        },
        BOARD {
            @Override
            public void perform(Actor a) {
                a.printBoard();
            }
        },
        SAVE {
            @Override
            public void perform(Actor a, String fileName) {
                try {
                    a.saveGame(fileName);
                } catch (IOException ioe) {
                    System.err.printf("Error: Could not save the current game configuration to \'%s\'.", fileName);
                    ioe.printStackTrace();
                }
            }
        };

        public void perform(Actor a) {
            System.out.println("Expected a second word");
        }
        public void perform(Actor a, String word) {
            System.out.println("Expected one word");
        }
    }

我将在所有操作中使用
enum
。然后,我会将代码添加到这些枚举中。好吧,我必须查找这意味着什么,但这可能是一种方法。如果是的话,非常感谢!这段代码不必要的难读。是的,很抱歉格式化
public class Actor {
    public void performAction(String actionString) throws IllegalArgumentException {
        String[] words = actionString.split(" ", 2);
        Action action = Action.valueOf(words[0].toUpperCase());
        if (words.length == 1)
            action.perform(this);
        else
            action.perform(this, words[1]);
    }

    enum Action {
        HELP {
            @Override
            public void perform(Actor a) {
                a.printHelp();
            }
        },
        STATUS {
            @Override
            public void perform(Actor a) {
                a.printStatus();
            }
        },
        BOARD {
            @Override
            public void perform(Actor a) {
                a.printBoard();
            }
        },
        SAVE {
            @Override
            public void perform(Actor a, String fileName) {
                try {
                    a.saveGame(fileName);
                } catch (IOException ioe) {
                    System.err.printf("Error: Could not save the current game configuration to \'%s\'.", fileName);
                    ioe.printStackTrace();
                }
            }
        };

        public void perform(Actor a) {
            System.out.println("Expected a second word");
        }
        public void perform(Actor a, String word) {
            System.out.println("Expected one word");
        }
    }