代码之家  ›  专栏  ›  技术社区  ›  kimathie

如何创建至少包含一个选项的命令

  •  0
  • kimathie  · 技术社区  · 4 年前

    我想创建一个命令,允许用户指定一个可用选项来执行命令。例如,这里是一个服务列表,命令是状态。用户可以发出命令 “地位——列出猩红石榴红衣主教” 对于部分集合或 '状态--全部' 提供全套服务。我已经实施了以下措施:

    @Command(name = "status", description = "checks the status of a service")
    public void status(
            @Option(names = "--all", description = "checks all services.") boolean all,
            @Option(names = "--list", arity = "0..1", description = "checks specified services.") boolean list,
            @Parameters(paramLabel = "<service>", description = "a list of service names") List<String> services) {
        if (all) {
            System.out.println("check all");
        } else if (list) {
            System.out.println("check listed");
        }
    }
    

    它可以工作,但有一个错误,即如果用户只提供命令 “状态” 没有任何进一步的论据,它被认为是有效的。我相信这是因为这两个选项都是布尔值。 我们如何纠正这一点,以提供至少一个可选选项?

    0 回复  |  直到 4 年前
        1
  •  1
  •   Remko Popma    4 年前

    我认为你可以通过改变 --list 从布尔值到字符串数组或集合的选项。

    例如:

    @Command(name = "status", description = "checks the status of a service")
    public void status(
            @Option(names = "--all", description = "checks all services.") boolean all,
            @Option(names = "--list", arity = "1..*", paramLabel = "<service>",
                    description = "checks specified services.") List<String> services) {
        if (all) {
            System.out.println("check all");
        } else if (services != null && !services.isEmpty()) {
            System.out.println("check listed");
        }
    }
    

    如果选项是互斥的,您可以使用 ArgGroup .

    但对于这种情况,最简单的解决方案可能是没有选择,只有一个要检查的服务列表。如果用户没有指定服务,则应用程序将检查所有服务。

    在代码中:

    @Command(name = "status",
      description = "Checks the status of all services, or only the specified services.")
    public void status(
            @Parameters(paramLabel = "<service>", arity = "0..*",
                        description = "A list of service names. Omit to check all services.") 
            List<String> services) {
        if (services == null || services.isEmpty()) {
            System.out.println("check all");
        } else {
            System.out.println("check listed");
        }
    }
    
    推荐文章