java - 为用户显示更好的错误消息

标签 java command


     private boolean relatedCommand(String input) {
            // make sure the split afterwards has at least size one
            if (input.matches(" .*")) {
                return false;
            }
            final String command = input.split(" ".toString())[0];
            return COMMAND_PACKAGE
                    .keySet()
                    .stream()
                    .map(Pattern::toString)
                    .anyMatch(patternText -> patternText.startsWith(command + " "));
      }


    public Command getCommand(final String input) throws InvalidInputException {
            if (relatedCommand(input)) {
                Terminal.printError("test");
                throw new InvalidInputException("invalid arguments");
            } else {
                throw new InvalidInputException("unknown command");
            }
            ...
     }

我无法向用户提供更具体的错误消息。例如我有命令 add track <argument1>add switch <argument1> 。如果用户只是输入“add”,他不应该收到错误消息“无效参数”。相反,它应该是“无效命令:要么使用添加轨道,要么添加开关”。由于 relatedCommand() 是一个 boolean 值。我如何有效地实现它?

最佳答案

正如您所提到的,当前该方法返回一个 boolean,这是一个两种状态的结果。同时,您正在寻求三种状态的结果:

  1. 命令已知
  2. 命令未知
  3. 有多个已知命令的前缀。

对于关于返回正确结果的方式的问题,一种选择是返回可能的命令的集合,它可以代表所需的三种状态:

  1. 集合由一个元素组成
  2. 集合为空
  3. 该集合由多个元素组成。

对原始代码的更改可以如下所示:

private Collection<String> relatedCommand(String input) {
        // make sure the split afterwards has at least size one
        if (input.matches(" .*")) {
            return Collections.emptyList();
        }
        final String command = input.split(" ".toString())[0];
        return COMMAND_PACKAGE
                .keySet()
                .stream()
                .map(Pattern::toString)
                .filter(patternText -> patternText.startsWith(comman))
                .collect(Collectors.toList());
  }


public Command getCommand(final String input) throws InvalidInputException {
        Collection<String> commands = relatedCommand(input)
        if (commands.size() == 1) {
            Terminal.printError("test");
            throw new InvalidInputException("invalid arguments");
        } else if (commands.isEmpty()) {
            throw new InvalidInputException("unknown command");
        } else {
            ...
        }
 }

关于java - 为用户显示更好的错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60260764/

相关文章:

java - Servlet 中的静态变量

JavaFX 在带有动画的条形图中可视化算法

java - Android:检查高分SQL表并添加分数

java - 从java程序运行批处理文件会破坏管道吗?

python 与 sqlite3

java - 驱动程序可执行文件不存在 : Selenium Firefox

c# - SQL 主键生成

.NET: "foreach"是命令吗?

c# - 来自命令行的 Windows 服务自定义命令

batch-file - 批处理命令和错误处理