使用Apache Commons CLI的互斥选项

Ror*_*ory 8 java apache-commons apache-commons-cli

我可以使用以下方法创建2个互斥选项:

Option a = OptionBuilder.create("a");
Option b = OptionBuilder.create("b");

OptionGroup optgrp = new OptionGroup();
optgrp .setRequired(true);
optgrp .addOption(a);
optgrp .addOption(b);
Run Code Online (Sandbox Code Playgroud)

以上将迫使用户提供选项a或选项b.

但如果我有第三种选择,c:

Option c = OptionBuilder.create("c");
Run Code Online (Sandbox Code Playgroud)

是否可以创建互斥选项,以便:

或者:

  1. 必须提供选项a或
  2. 必须提供选项b和c

我看不到使用OptionGroup的方法吗?

Ror*_*ory 5

作为解决方法,我实现了以下方法,但并不理想,但是。

public static void validate(final CommandLine cmdLine) {
   final boolean aSupplied = cmdLine.hasOption(A);

   final boolean bAndCSupplied = cmdLine.hasOption(B) && cmdLine.hasOption(C);

   final boolean bOrCSupplied = !bAndCSupplied && (cmdLine.hasOption(B) || cmdLine.hasOption(C));

   if ((aSupplied && bAndCSupplied) || (!aSupplied && !bAndCSupplied)
      || (aSupplied && bOrCSupplied )) {
          throw new Exception(...);
   }
}
Run Code Online (Sandbox Code Playgroud)

  • 是的,我认为 commons-cli 中的功能还没有那么远,但另一方面,它会为某些情况添加许多非常复杂的代码,这些代码可以像您一样在库外部轻松处理。 (2认同)